1

Linuxで動作しているプログラムからのODBC関数呼び出しをトレースしようとしました。このプログラムは、ODBCマネージャーを動的にリンクしてから、データベースに接続してデータをフェッチします。

odbcinst.iniに追加することで、unixODBCを使用してODBC呼び出しをトレースできます。

[ODBC]
Trace=yes
TraceFile=/tmp/sql.log

この方法は、IBMによって文書化されています:ODBC問題のデータの収集

しかし、マネージャーをunixODBCからInformix独自のマネージャー(libifdmr.so)に変更すると、トレースファイルが作成されません。Linux上のInformixマネージャー(およびドライバー)からODBCトレースを正常に取得した人はいますか?

クライアントバージョン:CSDK 3.50UC3

私はそれがバグではなく、私の設定に何か問題があることを願っています。

unixODBCについて:マルチスレッドアプリでunixODBCを使用できません。接続プールを使用していますが、接続以外のスレッドからの切断でアプリがsegfaultされました。また、マルチスレッドアプリでははるかに遅くなります。

4

2 に答える 2

1

実行する場合:

strings $INFORMIXDIR/lib/cli/libifdmr.so | grep _OdbcSetTrace

参照を見ることができますか。そうでない場合、ライブラリにはサポート機能がありません。それが見られる場合は、概説されているメカニズムが機能するはずです。そうでない場合は、おそらく報告可能なバグがあります。

問題を追跡しようとしているレベルはどれですか。また、unixODBCが機能するので、機能するドライバーマネージャーを使用してみませんか?


$ INFORMIXDIR / demo / cliからdistsel.cの例を取得し、CSDK3.50.FC3を使用してSolaris10でコンパイルしました。接続が成功するところまで到達しましたが、使用しているデータベースにテーブル'item'がないため、プログラムはSQLExecDirect()を停止します。'truss'(Linuxでは'strace'に相当)で実行すると、トレースファイルを開こうとしてもコードの証拠が表示されません。

私は以下を使用してコンパイルしました:

gcc -I$INFORMIXDIR/incl/cli distsel.c -DNO_WIN32 \
    -L$INFORMIXDIR/lib/cli -lifdmr -lifcli -o distsel

次の.odbc.iniファイルを使用しました。

;
;  odbc.ini
;
[ODBC Data Sources]
odbc_demo = IDS 11.50.FC3 stores on black

[ODBC]
Trace           = yes
TraceFile       = /tmp/odbc.trace

[odbc_demo]
Driver          = /usr/informix/11.50.FC1/lib/cli/libifcli.so
Description     = IBM Informix CLI 3.50
Server          = black_19
FetchBufferSize = 99
UserName        = jleffler
Password        = XXXXXXXX
Database        = stores
ServerOptions   =
ConnectOptions  =
Options         =
ReadOnly        = no

そしてこれ:

;
;  odbc.ini
;
[ODBC Data Sources]
odbc_demo = IDS 11.50.FC3 stores on black

[odbc_demo]
Driver          = /usr/informix/11.50.FC1/lib/cli/libifcli.so
Description     = IBM Informix CLI 3.50
Server          = black_19
FetchBufferSize = 99
UserName        = jleffler
Password        = XXXXXXXX
Database        = stores
ServerOptions   =
ConnectOptions  =
Options         =
ReadOnly        = no
Trace           = yes
TraceFile       = /tmp/odbc.trace

その結果、あなたはバグを見つけたと思います。バグがあなたが参照したFAQにあるのか、製品にあるのかわかりません-後者を考える傾向があります。問題をIBMテクニカル・サポートに報告する必要があります。(Informix CLI(ODBC)マニュアルを確認していません。製品のバグを報告する前に確認する価値があるかもしれません。マニュアルにトレースが機能しないことが示されている場合、およびおそらく機能することが示されていない場合動作する場合は、リストしたFAQページにバグがあります。)

SQLデータを確認する場合は、FAQのSQLIDEBUG部分が機能します。

SQLIDEBUG=2:distsel ./distsel

それは私のためにファイルdistsel_6004_0_102d40を生成しました-それはあなたのために異なります。次に、「sqliprint」ユーティリティを使用して、クライアントとサーバー間を流れるデータを確認できます。

'sqliprint'が見つからない場合は、私に連絡してください。

于 2009-03-18T23:18:34.807 に答える