Informix Client for LinuxのODBC呼び出しのトレース
質問
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を使用できません。接続プールを使用し、接続が接続とは別のスレッドから切断されたときにアプリがセグメンテーション違反になりました。また、マルチスレッドアプリでは非常に遅くなります。
解決 2
odbc.iniの設定でODBCトレースを取得しました:
[ODBC]
TRACE=1
TRACEFILE=/tmp/odbc_trace.txt
TRACEDLL=idmrs09a.so
IBM Informix ODBC Driver Programmer <!>#8217;のマニュアルバージョン3.50からコピーしました。 したがって、これらの設定がodbcinst.iniではなくodbc.iniにある間、他のIBM文書は有効ではないようであり、<!> quot; ODBC Problem <!> quot;のデータ収集に記載されていないTRACEDLLを設定する必要があります。ドキュメント。
更新: IBMはドキュメントを変更したようです。TRACEDLLに関する情報はありますが、odbcinst.iniは残っています。
他のヒント
実行する場合:
strings $INFORMIXDIR/lib/cli/libifdmr.so | grep _OdbcSetTrace
参照を確認できますか。そうでない場合、ライブラリにはサポート機能がありません。表示される場合は、概説されているメカニズムが機能するはずです。そうでない場合は、おそらく報告可能なバグがあります。
どのレベルで問題を追跡しようとしていますか?そして、unixODBCが動作するので、動作するドライバーマネージャーを使用してみませんか?
$ INFORMIXDIR / demo / cliからdistsel.cの例を取得し、CSDK 3.50.FC3を使用してSolaris 10でコンパイルしました。接続が成功するポイントに到達しましたが、使用しているデータベースにテーブル 'item'がないため、プログラムはSQLExecDirect()を停止します。 'トラス'(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)マニュアルを確認していません;製品のバグを報告する前に確認する価値があるかもしれません;マニュアルがTraceが機能しないことを示している場合、そしておそらくそれが機能していることを示していない場合動作すると、リストしたFAQページにバグがあります。)
SQLデータを見たい場合は、FAQのSQLIDEBUG部分が機能します:
SQLIDEBUG=2:distsel ./distsel
それは私のためにファイルdistsel_6004_0_102d40を生成しました-それはあなたにとって異なるでしょう。その後、「sqliprint」ユーティリティを使用して、クライアントとサーバー間を流れるデータを確認できます。
「sqliprint」が見つからない場合は、ご連絡ください。