Pregunta

Traté de rastrear las llamadas a funciones ODBC desde mi programa trabajando en Linux. Este programa vincula dinámicamente el administrador ODBC y luego se conecta a la base de datos y obtiene algunos datos.

Puedo rastrear llamadas ODBC con unixODBC agregando a odbcinst.ini:

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

Este método está documentado por IBM: Recopilación de datos para un problema ODBC

Pero cuando cambio el administrador de unixODBC al administrador de Informix (libifdmr.so), el archivo de rastreo no se crea. ¿Alguien obtuvo con éxito el seguimiento de ODBC del administrador (y controlador) de Informix en Linux?

Versión del cliente: CSDK 3.50UC3

Espero que no sea un error y que algo esté mal con mi configuración.

En cuanto a unixODBC: no puedo usar unixODBC en la aplicación multiproceso. Uso el grupo de conexiones y mi aplicación se configuró de forma predeterminada cuando la desconexión se realizó desde otro subproceso que la conexión. También es mucho más lento en la aplicación multiproceso.

¿Fue útil?

Solución 2

Obtuve el rastreo ODBC con esas configuraciones en mi odbc.ini:

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

Los copié de IBM Informix ODBC Driver Programmer & # 8217; s Manual Version 3.50. Por lo tanto, otros documentos de IBM parecen no válidos mientras esas configuraciones están en odbc.ini en lugar de odbcinst.ini y debe establecer TRACEDLL que no se mencionó en "Recopilación de datos para un problema ODBC". documento.

ACTUALIZACIÓN: Parece que IBM cambió la documentación: hay información sobre TRACEDLL, pero se mantuvo odbcinst.ini.

Otros consejos

Si ejecuta:

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

puedes ver alguna referencia. Si no, entonces la biblioteca no tiene las funciones de soporte. Si ve eso, el mecanismo descrito debería funcionar. Si no es así, probablemente tenga un error reportable.

¿Qué nivel está tratando de rastrear los problemas? Y, dado que unixODBC funciona, ¿por qué no usar el administrador de controladores que sí funciona?


Tomé el ejemplo distsel.c de $ INFORMIXDIR / demo / cli y lo compilé en Solaris 10 usando CSDK 3.50.FC3. Lo llegué al punto donde la conexión tiene éxito, pero falta la tabla 'elemento' en la base de datos que estoy usando, por lo que el programa detiene SQLExecDirect (). Cuando lo ejecuto bajo 'truss' (equivalente a 'strace' en Linux), entonces no veo evidencia del código incluso tratando de abrir el archivo de seguimiento.

Compilé usando:

gcc -I$INFORMIXDIR/incl/cli distsel.c -DNO_WIN32 \
    -L$INFORMIXDIR/lib/cli -lifdmr -lifcli -o distsel

Utilicé el siguiente archivo .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

Y este:

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

Por consiguiente, creo que has encontrado un error. No estoy seguro de si el error está en las preguntas frecuentes a las que hizo referencia o en el producto; me inclino a pensar en esto último. Debe informar el problema al Soporte técnico de IBM. (No he consultado el manual de Informix CLI (ODBC); puede valer la pena comprobarlo antes de intentar presentar un error del producto; si el manual indica que Trace no funciona, y tal vez si no indica que sí lo hace funciona, entonces hay un error en la página de preguntas frecuentes que enumeró).

Si está buscando ver los datos SQL, la parte SQLIDEBUG de las preguntas frecuentes funciona:

SQLIDEBUG=2:distsel ./distsel

Eso generó un archivo distsel_6004_0_102d40 para mí, será diferente para usted. Luego puede usar la utilidad 'sqliprint' para ver los datos que fluyen entre el cliente y el servidor.

Si no puede encontrar 'sqliprint', contácteme.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top