跟踪Informix Client for Linux的ODBC调用

我试图从在Linux上运行的程序跟踪ODBC函数调用。 该程序dynamic链接ODBCpipe理器,然后连接到数据库并获取一些数据。

我可以通过添加到odbcinst.ini来跟踪unixODBC的ODBC调用:

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

这种方法由IBMlogging: 为ODBC问题收集数据

但是,当我将pipe理器从unixODBC更改为Informix自己的pipe理器(libifdmr.so)时,不会创build跟踪文件。 有人从Linux上的Informixpipe理器(和驱动程序)成功获得ODBC跟踪?

客户端版本:CSDK 3.50UC3

我希望这不是一个错误,我的configuration有问题。

至于unixODBC:我不能在multithreading应用程序中使用unixODBC。 我使用连接池和我的应用程序segfaulted时断开连接从另一个线程。 在multithreading应用程序中它也慢得多。

如果你运行:

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

你有看到任何参考。 如果没有,那么图书馆没有支持功能。 如果你确实看到了,那么概述的机制应该是有效的。 如果没有,你可能有一个可报告的错误。

你想要追查什么水平的问题? 而且,由于unixODBC的工作原理,为什么不使用可以工作的驱动程序管理器呢?


我从$ INFORMIXDIR / demo / cli中取得了distsel.c的样例,并使用CSDK 3.50.FC3在Solaris 10上进行了编译。 我已经到了连接成功的地步,但是我正在使用的数据库中缺少表'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)手册;在尝试提交产品错误之前可能需要检查;如果手册指出跟踪不起作用,或者如果它没有指出它工作,那么你列出的常见问题页面有一个错误。)

如果您正在查看SQL数据,常见问题的SQLIDEBUG部分工作:

 SQLIDEBUG=2:distsel ./distsel 

这为我生成了一个文件distsel_6004_0_102d40 – 这对你来说会有所不同。 然后,您可以使用“sqliprint”实用程序来查看客户端和服务器之间的数据流。

如果你找不到“sqliprint”,请回到我身边。

我用odbc.ini中的这些设置获得了ODBC跟踪:

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

我从IBM Informix ODBC Driver程序员手册3.50版拷贝了它们。 因此,其他IBM文档似乎无效,而这些设置是在odbc.ini而不是odbcinst.ini中,而且您必须设置“收集ODBC问题的数据”文档中未提及的TRACEDLL。

更新:似乎IBM改变了文档:TRACEDLL上有信息,但odbcinst.ini仍然存在。