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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top