2009-03-18 14 views
1

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

私はODBCをトレースすることができますが、ODBCINST.INIに追加することにより、unixODBCので呼び出します。

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

この方法は、IBMによって文書化されていますCollecting data for an ODBC Problem

しかし、私はInformixの自身のマネージャー(libifdmrにunixODBCのからマネージャーを変更したとき.so)、トレースファイルは作成されません。誰でもLinux上のInformixマネージャ(およびドライバ)からODBCトレースを取得できましたか?

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

私はそれはバグではありませんし、何かが私の設定が間違っていることを願っています。

unixODBCについて:私はマルチスレッドアプリケーションでunixODBCを使用できません。私は、接続プールと別のスレッドから切断されたときに私のアプリケーションsegfaultedを使用します。また、マルチスレッドアプリケーションでは非常に遅いです。

+0

私の編集した答えの詳細 - TechNote(FAQ)または製品(またはその両方)のバグのようです。 –

答えて

0

私は私のodbc.iniファイルでこれらの設定とODBCトレースを得た:

[ODBC] 
TRACE=1 
TRACEFILE=/tmp/odbc_trace.txt 
TRACEDLL=idmrs09a.so 

私はIBMのInformix ODBCドライバプログラマーズ・マニュアルバージョン3.50からそれらをコピーしました。 そのような設定はodbcinst.iniではなくodbc.iniにあり、「ODBC問題のデータの収集」文書で言及されていないTRACEDLLを設定する必要があるため、他のIBM文書は有効ではないようです。

更新日: IBMが文書を変更したようです:TRACEDLLに関する情報がありますが、odbcinst.iniは残っています。

1

あなたが実行している場合:

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

をご参考文献を参照して入手できますか。そうでない場合、ライブラリにはサポート機能がありません。これを見れば、その仕組みはうまくいくはずです。そうでない場合は、おそらく報告可能なバグがあります。

問題をどのレベルで追跡しようとしていますか?そして、unixODBCが動作するので、なぜ動作するドライバマネージャを使用しないのですか?


私は$ INFORMIXDIR /デモ/ CLIからの例distsel.cを取り、CSDK 3.50.FC3を使用して、Solaris 10上でそれをまとめました。私は接続が成功するポイントに持っていますが、テーブル 'アイテム'は、私が使用しているデータベースにはないので、プログラムは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_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 

; 
; 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 

そして、このいずれかをバグ。バグが参照しているFAQにあるのか、製品にあるのかは分かりません。問題をIBMテクニカル・サポートに報告する必要があります。 (私はInformix CLI(ODBC)のマニュアルをチェックしていないが、製品のバグを報告する前にそれをチェックする価値があるかもしれない;もしマニュアルがTraceが機能しないと示していて、作品は、その後、バグがリストされているFAQページにあります)

あなたはSQLデータを参照するために探している場合は、よくある質問のSQLIDEBUGの一部が動作します。

のファイルdistsel_6004_0_102d40を生成
SQLIDEBUG=2:distsel ./distsel 

私 - それはあなたのために異なるでしょう。次に、 'sqliprint'ユーティリティを使用して、クライアントとサーバーの間で流れるデータを表示できます。

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

+0

libifdmr.soにOdbcSetTraceが見つかりました。 (編集した質問の詳細) –

+0

私はすでにSQLIDEBUGとsqliprintを使用しています。ありがとう! –

+0

@Jonathan Leffler 'SQLIDEBUG'を使用できますが、sqliprintコマンド – cppcoder

関連する問題