Question

J'ai essayé de suivre les appels de fonction ODBC de mon programme fonctionnant sous Linux. Ce programme relie dynamiquement le gestionnaire ODBC, puis se connecte à la base de données et récupère certaines données.

Je peux suivre les appels ODBC avec unixODBC en ajoutant au fichier odbcinst.ini:

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

Cette méthode est documentée par IBM: Collecte de données pour un problème ODBC

Mais lorsque je change de responsable unixODBC en responsable propre d’Informix (libifdmr.so), le fichier de trace n’est pas créé. Quelqu'un at-il réussi à obtenir la trace ODBC du gestionnaire Informix (et du pilote) sous Linux?

Version du client: CSDK 3.50UC3

J'espère que ce n'est pas un bug et qu'il y a un problème avec ma configuration.

En ce qui concerne unixODBC: je ne peux pas utiliser unixODBC dans une application multithread. J'utilise un pool de connexions et mon application est configurée par défaut lorsque la déconnexion était effectuée à partir d'un autre thread que la connexion. Il est également beaucoup plus lent dans les applications multithreads.

Était-ce utile?

La solution 2

J'ai tracé ODBC avec ces paramètres dans mon odbc.ini:

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

Je les ai copiées à partir de la version 3.50 du manuel du programmeur de pilotes ODBC IBM Informix. Par conséquent, d’autres documents IBM ne semblent pas valides tant que ces paramètres sont définis dans odbc.ini au lieu de odbcinst.ini et vous devez définir TRACEDLL, qui n’a pas été mentionné dans la section "Collecte de données pour un problème ODBC". document.

UPDATE: Il semble que IBM ait changé de documentation: il y a des informations sur TRACEDLL, mais le fichier odbcinst.ini est resté.

Autres conseils

Si vous exécutez:

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

voyez-vous des références? Si ce n'est pas le cas, la bibliothèque est sans les fonctions de support. Si vous voyez cela, le mécanisme décrit devrait fonctionner. Si ce n'est pas le cas, vous avez probablement un bogue à signaler.

Quel niveau essayez-vous de dépister les problèmes? Et, étant donné que unixODBC fonctionne, pourquoi ne pas utiliser le gestionnaire de pilotes qui fonctionne?

J'ai pris l'exemple distsel.c de $ INFORMIXDIR / demo / cli et l'ai compilé sous Solaris 10 à l'aide de CSDK 3.50.FC3. Je suis arrivé au point où la connexion a réussi, mais la table 'item' est manquante dans la base de données que j'utilise, donc le programme arrête SQLExecDirect (). Lorsque je l'exécute sous "botte" (équivalent de "strace" sous Linux), je ne vois aucune preuve du code essayant même d'ouvrir le fichier de trace.

J'ai compilé avec:

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

J'ai utilisé le fichier .odbc.ini suivant:

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

Et celui-ci:

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

En conséquence, je pense que vous avez trouvé un bug. Je ne suis pas sûr que le bogue soit dans la FAQ que vous avez mentionnée ou dans le produit - je suis enclin à penser à ce dernier. Vous devez signaler le problème au support technique IBM. (Je n'ai pas vérifié le manuel Informix CLI (ODBC); cela vaut la peine de le vérifier avant d'essayer de classer un bogue de produit; si le manuel indique que Trace ne fonctionne pas, et peut-être même s'il ne l'indique pas. travail, il y a un bogue dans la page de FAQ que vous avez listée.)

Si vous souhaitez voir les données SQL, la partie SQLIDEBUG de la FAQ fonctionne:

SQLIDEBUG=2:distsel ./distsel

Cela a généré un fichier distsel_6004_0_102d40 pour moi - ce sera différent pour vous. Vous pouvez ensuite utiliser l'utilitaire 'sqliprint' pour voir les données circuler entre le client et le serveur.

Si vous ne trouvez pas 'sqliprint', revenez-moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top