Domanda

Ho provato a rintracciare le chiamate di funzione ODBC dal mio programma lavorando su Linux. Questo programma collega dinamicamente il gestore ODBC, quindi si collega al database e recupera alcuni dati.

Posso tracciare le chiamate ODBC con unixODBC aggiungendo a odbcinst.ini:

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

Questo metodo è documentato da IBM: Raccolta di dati per un problema ODBC

Ma quando cambio gestore da unixODBC al gestore di Informix (libifdmr.so), il file di traccia non viene creato. Qualcuno ha ottenuto correttamente la traccia ODBC dal gestore (e dal driver) Informix su Linux?

Versione client: CSDK 3.50UC3

Spero che non sia un bug e che qualcosa non vada nella mia configurazione.

Come per unixODBC: non riesco a usare unixODBC nell'app multithread. Uso il pool di connessioni e la mia app segfault quando la disconnessione era da un altro thread rispetto alla connessione. È anche molto più lento nell'app multithread.

È stato utile?

Soluzione 2

Ho ottenuto la traccia ODBC con quelle impostazioni nel mio odbc.ini:

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

Li ho copiati dal manuale IBM Programmix ODBC Driver Programmer versione 3.50. Quindi altri documenti IBM non sembrano validi mentre quelle impostazioni sono in odbc.ini invece di odbcinst.ini e devi impostare TRACEDLL che non è stato menzionato in "Raccolta dati per un problema ODBC" documento.

UPDATE: Sembra che IBM abbia modificato la documentazione: ci sono informazioni su TRACEDLL, ma odbcinst.ini è rimasto.

Altri suggerimenti

Se corri:

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

vedi qualche riferimento. In caso contrario, la libreria è senza le funzioni di supporto. Se lo vedi, il meccanismo descritto dovrebbe funzionare. In caso contrario, probabilmente hai un bug da segnalare.

A quale livello stai cercando di rintracciare i problemi? E, poiché unixODBC funziona, perché non utilizzare il driver manager che funziona?


Ho preso l'esempio distsel.c da $ INFORMIXDIR / demo / cli e l'ho compilato su Solaris 10 usando CSDK 3.50.FC3. Sono arrivato al punto in cui la connessione ha esito positivo, ma la tabella 'item' manca nel database che sto usando, quindi il programma arresta SQLExecDirect (). Quando lo eseguo sotto 'truss' (equivalente di 'strace' su Linux), allora non vedo alcuna prova del codice nemmeno provando ad aprire il file di traccia.

Ho compilato usando:

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

Ho usato il seguente file .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

E questo:

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

Di conseguenza, credo che tu abbia trovato un bug. Non sono sicuro che il bug sia nelle FAQ a cui hai fatto riferimento o nel prodotto - sono propenso a pensare a quest'ultimo. È necessario segnalare il problema al supporto tecnico IBM. (Non ho controllato il manuale Informix CLI (ODBC); potrebbe valere la pena verificarlo prima di provare a presentare un bug del prodotto; se il manuale indica che Trace non funziona, e forse se non indica che funziona funziona, quindi c'è un bug nella pagina FAQ che hai elencato.)

Se stai cercando di vedere i dati SQL, la parte SQLIDEBUG delle FAQ funziona:

SQLIDEBUG=2:distsel ./distsel

Che ha generato un file distsel_6004_0_102d40 per me - sarà diverso per te. È quindi possibile utilizzare l'utilità "sqliprint" per vedere il flusso di dati tra client e server.

Se non riesci a trovare 'sqliprint', torna da me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top