代码之家  ›  专栏  ›  技术社区  ›  Michał Niklas

跟踪Informix Client for Linux的ODBC调用

  •  1
  • Michał Niklas  · 技术社区  · 17 年前

    我试图从我在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跟踪吗?

    我希望这不是一个bug,我的配置有问题。

    2 回复  |  直到 17 年前
        1
  •  1
  •   Jonathan Leffler    17 年前

    如果您运行:

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

    你能看到任何参考资料吗。如果没有,则库没有支持函数。如果你看到了这一点,那么概述的机制应该会起作用。如果没有,您可能有一个可报告的bug。


    我从$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
    

    因此,我相信您发现了一个bug。我不确定这个bug是在您引用的FAQ中还是在产品中,我倾向于认为是后者。您应该向IBM技术支持报告该问题。(我没有检查Informix CLI(ODBC)手册;在尝试提交产品缺陷之前,可能值得检查一下;如果手册指示跟踪不起作用,或者如果它没有指示跟踪起作用,那么您列出的FAQ页面中就有一个缺陷。)

    如果您希望查看SQL数据,FAQ中的SQLIDEBUG部分可以工作:

    SQLIDEBUG=2:distsel ./distsel
    

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

    如果找不到“sqliprint”,请与我联系。

        2
  •  0
  •   Michał Niklas    17 年前

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

    我从IBMInformixODBC驱动程序程序员手册3.50版复制了它们。 因此,当这些设置位于odbc.ini而不是odbcinst.ini中时,其他IBM文档似乎无效,您必须设置TRACEDLL,这在“为odbc问题收集数据”文档中没有提到。

    更新: IBM似乎改变了文档:有关于TRACEDLL的信息,但odbcinst.ini保留了下来。