Frage

Ich habe versucht, ODBC-Funktion zu verfolgen aus meinem Programm fordert Linux arbeiten. Dieses Programm dynamisch verbindet ODBC-Manager und dann auf Datenbank verbinden und einige Daten holen.

Ich kann verfolgen ODBC mit unixODBC ruft, indem zu odbcinst.ini:

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

Diese Methode wird von IBM dokumentiert: Das Sammeln von Daten für ein ODBC-Problem

Aber wenn ich Manager von unixODBC zu Informix eigenen Manager (libifdmr.so) ändern, wird die Trace-Datei nicht erstellt. Jeder erfolgreich ODBC-Trace von Informix-Manager erhalten (und Fahrer) auf Linux?

Client-Version: CSDK 3.50UC3

Ich hoffe, dass es nicht ein Fehler ist und etwas ist falsch mit meiner Konfig.

Wie für unixODBC: Ich kann nicht unixODBC in multithreaded App verwenden. Ich benutze Connection-Pool und meine app segfaulted wenn Trennung von einem anderen Thread als Verbindung war. Es ist auch viel langsamer in multithreaded App.

War es hilfreich?

Lösung 2

Ich habe ODBC-Trace mit diesen Einstellungen in meinem odbc.ini:

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

Ich kopierte sie von IBM Informix ODBC-Treiber Programmierhandbuch Version 3.50. So werden andere Dokumente IBM scheint nicht gültig, während diese Einstellungen in odbc.ini sind statt odbcinst.ini und Sie müssen TraceDll eingestellt, die nicht in erwähnt wurde „Sammeln von Daten für eine ODBC-Problem“ Dokument.

UPDATE: Es scheint, IBM Dokumentation geändert:. Gibt es Informationen über TraceDll, aber odbcinst.ini blieb

Andere Tipps

Wenn Sie ausführen:

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

erhalten Sie alle Verweise zu sehen. Wenn nicht, dann ist die Bibliothek, ohne dass die Support-Funktionen. Wenn Sie das tun sehen, sollte der Mechanismus skizziert arbeiten. Wenn dies nicht der Fall, werden Sie wahrscheinlich eine berichtspflichtige Fehler haben.

Wie hoch sind Sie versuchen, die Probleme zu verfolgen? Und da unixODBC funktioniert, warum nicht den Treiber-Manager verwenden, das funktioniert?


Ich habe das Beispiel distsel.c von $ INFORMIXDIR / demo / cli genommen und es auf Solaris 10 mit CSDK 3.50.FC3 zusammengestellt. Ich habe es bis zu dem Punkt, wo die Verbindung erfolgreich ist, aber die Tabelle ‚item‘ fehlt in der Datenbank Ich verwende, so stoppt das Programm SQLExecDirect (). Als ich es unter ‚Truss‘ (entspricht ‚strace‘ auf Linux) laufen, dann sehe ich keine Beweise für den Code selbst die Trace-Datei zu öffnen versuchen.

I zusammengestellt werden:

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

ich verwendet, um die folgende Datei .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

Und diese:

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

Folglich Ich glaube, Sie einen Fehler gefunden haben. Ich bin nicht sicher, ob der Fehler in der FAQ ist Sie verwiesen oder in dem Produkt - ich bin geneigt, diese zu denken. Sie sollten das Problem zu IBM Technical Support melden. (Ich habe nicht geprüft, die Informix CLI (ODBC) Handbuch, es könnte sich lohnen, die Überprüfung, dass, bevor Sie versuchen, ein Produkt Fehler in Datei, wenn das Handbuch gibt an, dass Trace nicht funktioniert, und vielleicht, wenn es nicht an, dass es funktioniert Arbeit, dann gibt es einen Fehler in der FAQ-Seite aufgelistet.)

Wenn Sie schauen, um die SQL-Daten, um zu sehen, der SQLIDEBUG Teil der FAQ funktioniert:

SQLIDEBUG=2:distsel ./distsel

Das ist eine Datei distsel_6004_0_102d40 für mich erzeugt - es wird für Sie anders sein. Anschließend können Sie das ‚sqliprint‘ Dienstprogramm die Daten fließen zwischen Client und Server zu sehen.

Wenn Sie nicht 'sqliprint' finden können, zu mir zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top