Отслеживание вызовов ODBC для клиента Informix для Linux

StackOverflow https://stackoverflow.com/questions/657994

  •  19-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Версия клиента:ЦСДК 3.50UC3

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

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

Это было полезно?

Решение 2

Я получил трассировку 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».

ОБНОВЛЯТЬ:Кажется, IBM изменила документацию:информация о TRACEDLL есть, но odbcinst.ini остался.

Другие советы

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

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 не работает, и, возможно, если оно не указывает, что оно работает работать, значит, на странице часто задаваемых вопросов есть ошибка.)

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

SQLIDEBUG=2:distsel ./distsel

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top