Find

Article
· Jul 27 4m read

ODBCログの取得方法(UNIX)

これは InterSystems FAQ サイトの記事です。
 

ODBCクライアントからのアクセスでエラーが発生した場合、返ってきたエラーメッセージやコンソールログ上の情報だけでは原因がよくわからない場合があります。

そのような場合に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

ログの内容の解析は専門的な知識が必要となりますので、取得後インターシステムズサポートセンターまでお送りください。

Discussion (0)1
Log in or sign up to continue
Article
· Jul 27 2m read

JSON形式のファイルを読み書きするサンプル

これは InterSystems FAQ サイトの記事です。
 

ダイナミックオブジェクトの%FromJSONFileメソッドを利用すると簡単にJSON形式のファイルの内容をダイナミックオブジェクトにコピーすることができます。

以下の形式のJSONファイルをそのメソッドを使用して取り込む例は以下のようになります。

{
    "ShipTo": {
        "City": "Tokyo",
        "Street": "Ginza",
        "PostalCode": "160-0001"
    },
    "CustomerId": 1,
    "Items": [
        {
            "ProductId": "MNT001",
            "Amount": 2
        },
        {
            "ProductId": "PC001",
            "Amount": 2
        }
    ]
}
 set tempobj = {}.%FromJSONFile("c:¥temp¥sample.json") 
 set customerid = tempobj.CustomerId           
 set iter = tempobj.Items.%GetIterator()
       
 while iter.%GetNext(.key,.val) {
   set line = {}.%FromJSON(val)
   set productid = val.ProductId
   set amount = val.Amount
 }
       
 zwrite

反対にダイナミックオブジェクトをJSON形式のファイルに書く方法は以下の様になります。

(上記の例のtempobjをそのまま出力対象として使用しています)

 set outputstream = ##class(%Stream.FileCharacter).%New()
 set outputstream.TranslateTable = "UTF8"
 set outputfilename = "C:¥temp¥sample2.json"
 set status = outputstream.LinkToFile(outputfilename)
 set status = tempobj.%ToJSON(outputstream)
Discussion (0)1
Log in or sign up to continue
Article
· Jul 27 4m read

ODBCログの取得方法(Windows)

これは InterSystems FAQ サイトの記事です。
 

ODBCクライアントからのアクセスでエラーが発生した場合、返ってきたエラーメッセージやコンソールログ上の情報だけでは原因がよくわからない場合があります。

そのような場合にODBCドライバのクライアントログを有効にすることで、エラーについての詳細情報を取得することができます

ODBCログの有効化については以下をご参照ください。

ODBCログの有効化

Windowsの場合は、上記に記載されている通り、2種類のログが取得できます。

  • クライアント・ドライバのログを有効にするには、ODBCデータソースアドミニストレータで使用しているDSNの「ODBCログ」チェックボックスをチェックします。 

 

 

  • ドライバー・マネージャのログを有効にするには、[トレース]タブをクリックして[トレースの開始]ボタンをクリックします。

   

変更の反映にはODBCクライアントアプリケーションを再起動する必要があります。

既定のODBCクライアントログファイル名は IRISODBC.log で、既定の場所は C:¥Users¥Public¥Logs です。

既定のトレースログ名は、SQL.logで、既定の場所は、c:¥Users¥<ユーザー名>AppData¥Local¥Temp¥です。

(すべてのユーザーIDのコンピュータ全体のトレースをチェックしない場合)

複数回ODBCリクエストが実行された場合、上書きではなくログが追記されます。

クライアントのプロセス毎に個別にログを取得することもできます。

クライアントログが正常に取得できている場合、以下の様な内容が書き込まれます。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
	Started At: Tue Mar 25 22:44:02 2025
	Driver Name:	IrisODBC3564.DLL
	Unicode Client Version:	2024.2.0.247.0
	Compiled at:	Jul 16 2024 09:17:19
	ODBC Version:	03.51
	Locale Setting:	Japanese_Japan.932
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
LoadConnect returned: 0x4DBC0000
LoadConnect returned sm_pfnIRISconnectToHostPort: 0x4DBC6750
LoadConnect returned sm_pfnIRISconnectSend: 0x4DBC62B0
LoadConnect returned sm_pfnIRISconnectRecv: 0x4DBC5E70
LoadConnect returned sm_pfnIRISconnectClose: 0x4DBC2CA0
LoadConnect returned sm_pfnIRISconnectGetErrorCode: 0x4DBC34C0
LoadConnect returned sm_pIRISconnectGetErrorText: 0x4DBDC000
LoadConnect returned sm_pfnIRISconnectGetSecurityLevel: 0x4DBC35F0
LoadConnect returned sm_pfnIRISconnectSetSecurityLevel: 0x4DBC6670
LoadConnect returned sm_pfnIRISconnectGetSocketDescriptor: 0x4DBC3610
LoadConnect returned sm_pfnIRISconnectLoginToHostPort: 0x4DBC4AE0
LoadConnect returned sm_pfnIRISconnectGeneratePrincipalName: 0x4DBC3120
LoadConnect returned sm_pfnIRISconnectGetLicenseId: 0x4DBC3530
LoadConnect returned sm_pfnIRISconnectSetTraceFilePtr: 0x4DBC6740
LoadConnect returned sm_pfnIRISconnectGetTSClientName: 0x4DBC3620
LoadConnect returned sm_pfnIRISconnectSetLocalBindings: 0x4DBC64E0
LoadConnect returned sm_pfnIRISconnectSetMode: 0x4DBC6630
LoadConnect returned sm_pfnIRISconnectGetRdlen: 0x4DBC35E0
GetLocalizedResources: (03/25/25-22:44:02:636) Found resources for locale JPN (400) in C:\Program Files\Common Files\InterSystems\IRIS\IrisODBCJPN.DLL
--> ConfigDSNW: (03/25/25-22:44:02:636) hParent = 0x000a1350 request 2
<-- ConfigDSNW: (03/25/25-22:44:11:189) returning 1

 

トレースログが正常に取得できている場合、以下の様な内容が書き込まれます。

 


EXCEL           acec-31b4	ENTER SQLAllocHandle 
		SQLSMALLINT                  1 <SQL_HANDLE_ENV>
		SQLHANDLE           0x0000000000000000
		SQLHANDLE *         0x000002D12FAA60A0
EXCEL           acec-31b4	EXIT  SQLAllocHandle  with return code 0 (SQL_SUCCESS)
		SQLSMALLINT                  1 <SQL_HANDLE_ENV>
		SQLHANDLE           0x0000000000000000
		SQLHANDLE *         0x000002D12FAA60A0 ( 0x000002D11D6A1070)

EXCEL           acec-31b4	ENTER SQLSetEnvAttr 
		SQLHENV             0x000002D11D6A1070
		SQLINTEGER                 200 <SQL_ATTR_ODBC_VERSION>
		SQLPOINTER                 3 <SQL_OV_ODBC3>
		SQLINTEGER                  -6 

 

ログの内容の解析は専門的な知識が必要となりますので、取得後インターシステムズサポートセンターまでお送りください。

Discussion (0)1
Log in or sign up to continue
Article
· Jul 27 1m read

WEBGatewayのサーバー設定項目で、Minimum Server Connections、Maximum Server Connectionsの項目が表示されない

これは InterSystems FAQ サイトの記事です。

「Maximum/Minimum_Server_Connections」の設定で、ApacheのMPM(Multi Processing Module)設定が、prefork になっている場合、Apache ワーカープロセスあたり2つ以上の IRIS/Caché コネクションを設定しても意味がないために、設定自体出来なくなっております。

※ preforkでは1つのプロセスが1つのスレッドを持ちます。

preforkの詳細は以下をご参照ください

MPM prefork/worker/eventの違い

Discussion (0)1
Log in or sign up to continue
Question
· Jul 27

How to Calculate Time Differences in Hours Between Two Timestamps in ObjectScript?

Hi all,

I’m working on a data transformation in IRIS where I need to calculate the difference in hours between two timestamps stored as %TimeStamp.

Example:

Set startTime = "2024-07-12 08:30:00"
Set endTime = "2024-07-12 15:15:00"

I’d like to calculate the number of hours (with decimals, like 6.75) between them. What's the recommended way to do this in ObjectScript? I’ve seen examples using $ZDATETIME, but I’m not sure if that’s the cleanest approach.

Any suggestions or best practices would be appreciated!

Thanks,
Jhonn Marie

3 Comments
Discussion (3)3
Log in or sign up to continue