これは InterSystems FAQ サイトの記事です。
ODBCクライアントからのアクセスでエラーが発生した場合、返ってきたエラーメッセージやコンソールログ上の情報だけでは原因がよくわからない場合があります。
そのような場合にODBCドライバのクライアントログを有効にすることで、エラーについての詳細情報を取得することができます。
ODBCログの有効化については以下をご参照ください。
UNIX系のシステムの場合、上記に記載されている通り、2種類のログが取得できます。
- クライアント・ドライバ・ログの取得方法 以下の環境変数でトレースのオンと出力するファイルを指定します。
export IRISODBCTRACE=1
export IRISODBCTRACEFILE=/Users/user1/work/odbcclient.log
- ドライバマネージャのログの取得方法 ドライバマネージャのデータソース設定ファイル(ODBC.ini)に以下の様にトレースをオンにする設定とログファイルの場所と名前を指定します。
[ODBC Data Sources]
IRIS ODBC User = IRIS iODBC Driver
[IRIS ODBC User]
Driver = /opt/iris/bin/libirisodbc35.so
Description =
Host = localhost
Namespace = USER
UID = _system
Password = SYS
Protocol = TCP
Port = 1972
Trace = on
TraceFile = /Users/user1/work/iodbctrace.log
変更の反映にはODBCクライアントアプリケーションを再起動する必要があります。
クライアントのプロセス毎に個別にログを取得すつこともできます。 クライアントログが正常に取得できている場合、以下の様な内容が書き込まれます。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Started At: Thu Mar 27 11:02:27 2025
Driver Name: libirisodbc35.so
Unicode Client Version: 2024.2.0.247.0
Compiled at: Jul 16 2024 09:26:07
ODBC Version: 03.51
Locale Setting: ja_JP.UTF-8
ODBC Config file: /Library/ODBC/odbc.ini
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Warning: IRISConnect Failed to load, Error Code: 2; Reason=dlopen(irisconnect.so, 0x0002): tried: 'irisconnect.so' (relative path not allowed in hardened program), '/System/Volumes/Preboot/Cryptexes/OSirisconnect.so' (no such file), '/usr/lib/irisconnect.so' (no such file, not in dyld cache), 'irisconnect.so' (relative path not allowed in hardened program), '/usr/lib/irisconnect.so' (no such file, not in dyld cache)
--> SQLAllocHandle: (03/27/25-11:02:27:224) htype = 1, inhandle = 00000000
--> SQLAllocEnv: (03/27/25-11:02:27:224)
<-- SQLAllocEnv: (03/27/25-11:02:27:224) henv = 0x1301b8000 returning 0
<-- SQLAllocHandle: (03/27/25-11:02:27:224) Returning 0, outhandle = 0x1301b8000
--> SQLSetEnvAttr: (03/27/25-11:02:27:224) henv = 0x1301b8000, Attribute=200, Value=3, StringLength=0
<-- SQLSetEnvAttr: (03/27/25-11:02:27:224) Returning 0
--> SQLAllocHandle: (03/27/25-11:02:27:224) htype = 2, inhandle = 0x1301b8000
--> SQLAllocConnect: (03/27/25-11:02:27:224) henv = 0x1301b8000
<-- SQLAllocConnect: (03/27/25-11:02:27:224) hdbc = 0x1300f0000 returning 0
<-- SQLAllocHandle: (03/27/25-11:02:27:224) Returning 0, outhandle = 0x1300f0000
ドライバマネージャログが正常に取得できている場合、以下の様な内容が書き込まれます。
** iODBC Trace file
** Trace started on Thu Mar 27 11:02:27 2025
** Driver Manager: 03.52.0607.1008
[000000.024585]
soffice 205384840 EXIT SQLDriverConnect with return code 0 (SQL_SUCCESS)
SQLHDBC 0x600002d4cf00
SQLPOINTER 0x0
SQLCHAR * 0x6000017c51a8
SQLSMALLINT 19
SQLCHAR * 0x16d9f9e58
| DSN=IRIS ODBC User;SERVER=localhost;PORT |
| =1972;DATABASE=USER;AUTHENTICATION METHO |
| D=0;UID=_system;PWD=***;STATIC CURSORS=0 |
| ;QUERY TIMEOUT=1 |
SQLSMALLINT 4095
SQLSMALLINT * 0x16d9f9e3e (136)
SQLUSMALLINT 0 (SQL_DRIVER_NOPROMPT)
[000000.024666]
soffice 205384840 ENTER SQLGetInfo
SQLHDBC 0x600002d4cf00
SQLUSMALLINT 25 (SQL_DATA_SOURCE_READ_ONLY)
SQLPOINTER 0x16d9f95d8
SQLSMALLINT 511
SQLSMALLINT * 0x16d9f95d6
ログの内容の解析は専門的な知識が必要となりますので、取得後インターシステムズサポートセンターまでお送りください。