문제

Linux에서 작업하는 프로그램에서 ODBC 기능 호출을 추적하려고했습니다. 이 프로그램은 ODBC 관리자를 동적으로 연결 한 다음 데이터베이스에 연결하고 일부 데이터를 가져옵니다.

odbcinst.ini에 추가하여 unixodbc로 ODBC 호출을 추적 할 수 있습니다.

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

이 방법은 IBM에 의해 문서화됩니다. ODBC 문제에 대한 데이터 수집

그러나 UnixODBC에서 Informix의 자체 관리자 (libifdmr.so)로 관리자를 변경하면 추적 파일이 생성되지 않습니다. Linux의 Informix Manager (및 드라이버)로부터 ODBC 추적을 성공적으로 얻은 사람이 있습니까?

클라이언트 버전 : CSDK 3.50UC3

나는 그것이 버그가 아니고 내 구성에 문제가 있기를 바랍니다.

UnixODBC의 경우 : MultithReaded 앱에서 UnixODBC를 사용할 수 없습니다. 연결 풀이 연결된 다른 스레드에서 연결된 경우 Connection Pool과 앱 Segfaulted를 사용합니다. 멀티 스레드 앱에서는 훨씬 느립니다.

도움이 되었습니까?

해결책 2

나는 ODBC.ini의 설정으로 ODBC 추적을 받았습니다.

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

IBM Informix ODBC 드라이버 프로그래머의 매뉴얼 버전 3.50에서 복사했습니다. 따라서 다른 IBM 문서는 ODBCINST.ini 대신 ODBC.ini에있는 동안 다른 IBM 문서가 유효하지 않은 것처럼 보이며 "ODBC 문제에 대한 데이터 수집"문서에서 언급되지 않은 추적을 설정해야합니다.

업데이트 : IBM이 문서화를 변경 한 것 같습니다. Tracedll에 대한 정보가 있지만 Odbcinst.ini는 남아있었습니다.

다른 팁

달리면 :

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

참조를 보게 되나요? 그렇지 않다면 라이브러리에는 지원 기능이 없습니다. 당신이 그것을 보면, 설명 된 메커니즘이 작동해야합니다. 그렇지 않으면보고 가능한 버그가있을 것입니다.

문제를 추적하려고하는 수준은 무엇입니까? 그리고 UnixODBC가 작동하기 때문에 작동하는 드라이버 관리자를 사용하지 않는 이유는 무엇입니까?


나는 $ involomixdir/demo/cli에서 distsel.c 예제를 가져 와서 csdk 3.50.fc3를 사용하여 Solaris 10에서 컴파일했습니다. 연결이 성공하는 지점까지 가져 왔지만 사용중인 데이터베이스에 테이블 '항목'이 누락되어 프로그램이 sqlexecdirect ()를 중지합니다. 'Truss'(Linux의 'Strace'와 동일) 아래에서 실행하면 추적 파일을 열려고하는 코드의 증거가 없습니다.

나는 다음을 사용하여 컴파일했다 :

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) 매뉴얼을 확인하지 않았습니다. 제품 버그를 제출하기 전에 확인하는 것이 좋습니다. 매뉴얼에 트레이스가 작동하지 않는 경우, 아마도 그것이 수행한다는 것을 나타내지 않는 경우 작업, FAQ 페이지에 나열된 버그가 있습니다.)

SQL 데이터를보고 싶다면 FAQ의 SQLIDEBUG 부분이 작동합니다.

SQLIDEBUG=2:distsel ./distsel

파일 Distsel_6004_0_102d40을 생성했습니다. 나에게 다를 것입니다. 그런 다음 'sqliprint'유틸리티를 사용하여 클라이언트와 서버 간의 데이터가 흐르는 것을 볼 수 있습니다.

'sqliprint'를 찾을 수 없다면 다시 연락하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top