跟踪ODBC调用Informix Client for Linux

时间:2009-03-18 12:11:22

标签: linux odbc trace informix

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

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

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

IBM记录了此方法:Collecting data for an ODBC Problem

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

客户端版本:CSDK 3.50UC3

我希望它不是一个错误,我的配置出了问题。

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

2 个答案:

答案 0 :(得分:1)

如果你跑:

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)手册;在尝试提交产品错误之前可能值得检查;如果手册指示Trace不起作用,或者如果它没有表明它确实存在工作,然后您列出的常见问题解答页面中有一个错误。)

如果您希望查看SQL数据,请参阅常见问题解答的SQLIDEBUG部分:

SQLIDEBUG=2:distsel ./distsel

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

如果找不到'sqliprint',请回复我。

答案 1 :(得分:0)

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

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

我是从IBM Informix ODBC Driver Programmer's Manual Version 3.50复制它们的。 因此,其他IBM文档似乎无效,而这些设置在odbc.ini而不是odbcinst.ini中,您必须设置“收集ODBC问题的数据”文档中未提及的TRACEDLL。

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

相关问题