Трассировка ODBC требует Informix Client для Linux - PullRequest
1 голос
/ 18 марта 2009

Я пытался отследить вызовы функций ODBC из моей программы, работающей в Linux. Эта программа динамически связывает ODBC-менеджер, а затем подключается к базе данных и извлекает некоторые данные.

Я могу отслеживать вызовы ODBC с unixODBC, добавив в odbcinst.ini:

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

Этот метод документирован IBM: Сбор данных для проблемы ODBC

Но когда я меняю менеджер с unixODBC на собственный менеджер Informix (libifdmr.so), файл трассировки не создается. Кто-нибудь успешно получил трассировку ODBC от менеджера (и драйвера) Informix в Linux?

Версия клиента: CSDK 3.50UC3

Я надеюсь, что это не ошибка и что-то не так с моим конфигом.

Что касается unixODBC: я не могу использовать unixODBC в многопоточном приложении. Я использую пул соединений, и мое приложение отключилось, когда отключение было от другого потока, чем соединение. Это также намного медленнее в многопоточном приложении.

Ответы [ 2 ]

1 голос
/ 19 марта 2009

Если вы запустите:

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

Вы видите какие-либо ссылки. Если нет, то библиотека без вспомогательных функций. Если вы видите это, описанный механизм должен работать. Если это не так, возможно, у вас есть отчетная ошибка.

На каком уровне вы пытаетесь отследить проблемы? И поскольку unixODBC работает, почему бы не использовать менеджер драйверов, который работает?


Я взял пример distsel.c из $ INFORMIXDIR / demo / cli и скомпилировал его в Solaris 10, используя CSDK 3.50.FC3. Я дошел до того, что соединение установилось успешно, но таблица «item» отсутствует в используемой мной базе данных, поэтому программа останавливает SQLExecDirect (). Когда я запускаю его в «truss» (эквивалент «strace» в Linux), я не вижу никаких свидетельств того, что код даже пытается открыть файл трассировки.

Я скомпилировал с помощью:

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

Я использовал следующий файл .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

А вот этот:

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

Следовательно, я полагаю, вы нашли ошибку. Я не уверен, есть ли ошибка в FAQ, на который вы ссылались, или в продукте - я склонен думать о последнем. Вы должны сообщить об этой проблеме в службу технической поддержки IBM. (Я не проверял руководство по Informix CLI (ODBC); возможно, стоит проверить это перед попыткой сообщить об ошибке продукта; если руководство указывает, что Trace не работает, и, возможно, если оно не указывает, что оно работает работать, то есть ошибка на странице FAQ, которую вы перечислили.)

Если вы хотите посмотреть данные SQL, часть FAQ по SQLIDEBUG работает:

SQLIDEBUG=2:distsel ./distsel

Это сгенерировало для меня файл distsel_6004_0_102d40 - он будет другим для вас. Затем вы можете использовать утилиту sqliprint для просмотра данных, передаваемых между клиентом и сервером.

Если вы не можете найти 'sqliprint', вернитесь ко мне.

0 голосов
/ 23 марта 2009

Я получил трассировку ODBC с этими настройками в моем odbc.ini:

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

Я скопировал их из Руководства по программированию драйвера IBM Informix ODBC, версия 3.50. Поэтому другие документы IBM, по-видимому, недействительны, пока эти параметры находятся в odbc.ini вместо odbcinst.ini, и вы должны установить TRACEDLL, который не был упомянут в документе «Сбор данных для проблемы ODBC».

UPDATE: Кажется, IBM изменила документацию: есть информация о TRACEDLL, но odbcinst.ini остался.

...