2012-03-19 11 views
9

こんにちは私はUbuntu 10.10 32ビット版マシンでVerticaのDSN設定を構成しました。 設定はすべて問題なく、クロスチェックしています。ここでisql実行中にunixODBCエラーが発生する[Vertica]

は私のodbc.iniファイルです:

[VerticaDSN] 
    Description = VerticaDSN ODBC driver 
    Driver = /opt/vertica/lib/libverticaodbc_unixodbc.so 
    Servername = myservername 
    Database = mydbname 
    Port = 5433 
    UserName = myuname 
    Password = ******* 
    Locale = en_US 

同様に、私はODBCINST.INIファイルを持っています。私は、コマンド実行時に

ます。isql -v VerticaDSNを私は次のエラーを取得:

[S1000][unixODBC][DSI] The error message NoSQLGetPrivateProfileString could not be found in the en-US locale. Check that /en-US/ODBCMessages.xml exists. 
[ISQL]ERROR: Could not SQLConnect. 

を私はすべてを試してみましたが、私はこのエラーを解読することはできませんよ。

ご協力いただきますようお願い申し上げます。

+0

実行中のデータベースドライバとVerticaのバージョンは何ですか?また、私は通常ODBC接続でロケールを指定しません。あなたはそれが本当に必要ですか?これは私のユーザエラーよりもローカリゼーションのバグのように思えますが、間違っている可能性があります。 – bpanulla

+0

私は無駄にそれを削除しました。私は現在vertica_5.1.1_odbc_i386_linux verticaドライバを使用しています。私はisql文をトレースしましたが、vertica.iniファイルを探し続けます。そのようなファイルはありますか?私は気分がそれを見つけるようです –

答えて

14

ドライバ設定セクションが見つからないことがあります。編集するか、次の内容のファイルを作成/etc/vertica.ini:

[Driver] 
DriverManagerEncoding=UTF-16 
ODBCInstLib=/usr/lib64/libodbcinst.so 
ErrorMessagesPath=/opt/vertica/lib64 
LogLevel=4 
LogPath=/tmp 

詳しい情報は、セクション「追加ドライバの設定の場所」でのVerticaプログラマーズ・ガイドに記載されています。

+0

ええ、私の場合は、これは正確な問題でした –

+0

ありがとう!それはまさにポイントです。 – MohamedEzz

1

エラーからunixODBCが使用されていることがわかりました.DSIは、ODBCエラーテキストが[]内のエントリでフォーマットされているため、「DSI」と呼ばれています(Example diagnostic messages )。

メッセージは「SQLGetPrivateprofileStringが見つかりませんでした」と仮定します。 SQLGetPrivateProfileStringは、odbc.iniファイルから項目を読み取るためにODBCドライバー・マネージャーが提供するAPIです。私はlibodbcinst.so共有オブジェクトにあるはずだと信じていますが、一部のディストリビューション(例えば、Ubuntu/Debian)は共有オブジェクトからシンボルを削除して、それを確認することは困難です。

DSNでは、ドライバは "/opt/vertica/lib/libverticaodbc_unixodbc.so"というファイルです。 odbc.iniでドライバの名前をつけて、odbcinst.iniファイルにエントリを追加する方が一般的ですが、DSNは正常です。例えば:それをやって、上記の例では

/etc/odbcinst.ini: 
[Easysoft ODBC-SQL Server SSL] 
Driver=/usr/local/easysoft/sqlserver/lib/libessqlsrv.so 
Setup=/usr/local/easysoft/sqlserver/lib/libessqlsrvS.so 
Threading=0 
FileUsage=1 
DontDLClose=1 

/etc/odbc.ini: 
[SQLSERVER_SAMPLE_SSL] 
Driver=Easysoft ODBC-SQL Server SSL 
Description=Easysoft SQL Server ODBC driver 
. 
. 

参照してください。この方法は、あなたがスレッドのようなドライバーに関連した追加オプションを指定することができます(とネット上でクイック検索がにVerticaがあればより制限されたスレッド= 1を使用することができます示唆スレッド化されたプログラムを使用する)とDontDLClose。しかし、私が言ったように、あなたは彼らが今いるようにものは動作するはずです。

次に、次のビットはプラットフォームによって異なり、指定した場合は気付かれませんでした。 ODBCドライバの共有オブジェクトを調べて、それが依存するものを確認する必要があります。 Linuxでは、次のようなことを行います:

$ ldd /usr/local/easysoft/sqlserver/lib/libessqlsrv.so 
    linux-gate.so.1 => (0xb76ff000) 
    libodbcinst.so.1 => /usr/lib/libodbcinst.so.1 (0xb75fe000) 
    libesextra_r.so => /usr/local/easysoft/lib/libesextra_r.so (0xb75fb000) 
    libessupp_r.so => /usr/local/easysoft/lib/libessupp_r.so (0xb75de000) 
    libeslicshr_r.so => /usr/local/easysoft/lib/libeslicshr_r.so (0xb75cd000) 
    libestdscrypt.so => /usr/local/easysoft/lib/libestdscrypt.so (0xb75c8000) 
    libm.so.6 => /lib/libm.so.6 (0xb75a2000) 
    libc.so.6 => /lib/libc.so.6 (0xb7445000) 
    libltdl.so.7 => /usr/lib/libltdl.so.7 (0xb743b000) 
    libpthread.so.0 => /lib/libpthread.so.0 (0xb7421000) 
    /lib/ld-linux.so.2 (0xb7700000) 
    libdl.so.2 => /lib/libdl.so.2 (0xb741d000) 

このODBCドライバは、libodbcinst.so.1と動的リンカーによって異なります。私はあなたのVerticaドライバがこの点で似ているはずだと思いますが、Verticaドライバが最初に読み込まれるときにこの共有オブジェクト自体を動的に読み込むことは可能です。どちらの方法でも、Verticaドライバがlibodbcinst.soにあるシンボルSQLGetPrivateProfileStringを見つけることができないように見えるので、a)あなたはlibodbcinst.soを持っていることを確認してください。b)ダイナミックリンカはこれについて知っています(これはプラットフォームによって異なります) /etc/ld.so.confとLD_LIBRARY_PATHとld.soのmanページを参照してください)c)ldd(または同等のもの)を実行して、欠落している依存関係がないようにします。

おそらく、ドライバがドライバ固有の設定を保存している場所です - ドライバによってはこれがあります。このファイルの形式が上記のodbcの形式と同じ場合は、ODBC APIに使用するファイルを指定できるので、このファイルにはSQLGetPrivateProfileStringも使用されます。

これ以降、私はコンタクトバーチカ以外のアイデアはありません。

0

Arun - データベースのバージョンとドライバのバージョンを教えていただければ、より詳細な情報を入手できます。また、私は公式Verticaコミュニティフォーラムでこれを投稿しようとするかもしれません。 ...

http://my.vertica.com/forums/topic/odbc-on-linux-issue/

「ODBCInstLib」についての終わりに、具体的にコメントを:

http://my.vertica.com/forums/forum/application-and-tools-area/client-drivers/

私はあなたの問題は、私はそれがこの記事に関連するかもしれないと思うが何であるかを推測していた場合。

2

この問題についてインターネットを検索してみると、たくさんの人がisqlまたはosql(isqlを使用)ではなくtsqlに接続できていることがわかりました。私はこの同じ問題を抱えており、問題の内容を把握しようとしている先週の研究とテストを行っています。私が思うものがWindowsサーバーまたはSQLサーバーの設定と関係している場合、誰もがODBCの角度からそれに近づいています。私は、Windowsサーバー上のログをチェックし、ODBCを実行しているマシンがそれにヒットしたことを確認し、繰り返しログインしようとしましたが、実行できませんでした。イベントビューアには、クライアントマシンがSQL Serverにログインしようとしているがホストマシンによって拒否されていることを示す多数のエントリがあります。それは私が今焦点を当てている角度であり、問​​題があると私は思っています。私がこの問題を解決したら、私はこの問題について私が知ったことを誰にでも知らせるように再び投稿します。

ありがとう、

+0

ありがとうJamatrix、本当に感謝しています –

関連する問題