Rastreamento de chamadas ODBC para Informix Client for Linux
Pergunta
Eu tentei rastrear chamadas de função ODBC de meu programa de trabalho em Linux. Este programa dinamicamente links gerente de ODBC e, em seguida, conectar-se a base de dados e buscar alguns dados.
Eu posso rastrear ligações de ODBC com unixODBC adicionando a odbcinst.ini:
[ODBC]
Trace=yes
TraceFile=/tmp/sql.log
Este método é documentado pela IBM: a recolha de dados para um problema ODBC
Mas quando eu mudar gerente de unixODBC ao próprio gerente do Informix (libifdmr.so), o arquivo de rastreamento não é criado. Qualquer pessoa com êxito obtido rastreamento ODBC do gerente de Informix (e motorista) no Linux?
A versão do cliente: CSDK 3.50UC3
Espero que isso não é um erro e algo está errado com a minha configuração.
Quanto unixODBC: Eu não pode usar unixODBC no aplicativo multithreaded. Eu uso pool de conexão e meu aplicativo segfaulted quando desconexão era de outro segmento de conexão. Também é muito mais lento no aplicativo multithreaded.
Solução 2
Eu tenho rastreamento ODBC com essas configurações no meu odbc.ini:
[ODBC]
TRACE=1
TRACEFILE=/tmp/odbc_trace.txt
TRACEDLL=idmrs09a.so
Copiei-los do manual IBM Informix ODBC driver do programador versão 3.50. Então outros documentos IBM parece não válida enquanto essas configurações estão em odbc.ini vez de odbcinst.ini e você deve definir TraceDll que não foi mencionado em "A coleta de dados para um ODBC Problem" documento.
UPDATE: Parece IBM mudou documentação:. Não há informações sobre TraceDll, mas odbcinst.ini permaneceu
Outras dicas
Se você executar:
strings $INFORMIXDIR/lib/cli/libifdmr.so | grep _OdbcSetTrace
você começa a ver todas as referências. Se não, então a biblioteca é sem as funções de apoio. Se você faz ver que, o mecanismo descrito deve funcionar. Se isso não acontecer, você provavelmente tem um bug reportado.
Qual o nível que você está tentando rastrear as questões? E, uma vez unixODBC funciona, por que não usar o gerenciador de driver que funciona?
Eu tenho tomado o exemplo distsel.c de $ INFORMIXDIR / demo / cli e compilado no Solaris 10 usando CSDK 3.50.FC3. Eu consegui-lo para o ponto onde a conexão tiver êxito, mas a tabela 'item' está faltando no banco de dados que estou usando, de modo que o programa pára SQLExecDirect (). Quando eu executá-lo em 'armação' (equivalente a 'strace' no Linux), então não vejo nenhuma evidência do código, mesmo tentando abrir o arquivo de rastreamento.
Eu compilei usando:
gcc -I$INFORMIXDIR/incl/cli distsel.c -DNO_WIN32 \
-L$INFORMIXDIR/lib/cli -lifdmr -lifcli -o distsel
Eu usei o seguinte arquivo .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 esta:
;
; 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 isso, eu acredito que você tenha encontrado um bug. Eu não tenho certeza se o bug está no FAQ você referenciado ou no produto - Estou inclinado a pensar o último. Você deve comunicar o problema ao Suporte Técnico da IBM. (Eu não ter verificado o Informix CLI (ODBC) manual; pode valer a pena verificar que antes de tentar registrar um bug do produto, se o manual indica que rastreamento não funciona, e talvez se ele não indica que ele faz trabalho, então há um bug na página de FAQ que você listou.)
Se você estiver olhando para ver os dados SQL, a parte SQLIDEBUG do FAQ funciona:
SQLIDEBUG=2:distsel ./distsel
Isso gerou um distsel_6004_0_102d40 arquivo para mim - será diferente para você. Você pode então usar o utilitário 'sqliprint' para ver os dados fluindo entre cliente e servidor.
Se você não consegue encontrar 'sqliprint', voltar para mim.