鈴木 由臣
株式会社クレスコ・ジェイキューブ
デジタルソリューションセンター
今回のIBM i 技術情報は、オブジェクトのロック情報をプログラムで取得する方法についてご紹介します。
IBM i ではオブジェクトにどのようなロックがかかっているか、そのロック情報を取得する方法として、WRKOBJLCKコマンドが提供されています。しかしWRKOBJLCKコマンドは、結果を画面かスプール出力でしか表示できないため、ロック情報を基にバッチプログラムで処理を継続させるなどは困難でした。
今回ご紹介するQSYS2/OBJ_LOCKファイルにはロック情報が格納されていますので、このファイルを利用してSQLやRPGなどでロック情報を取得すれば、オブジェクトのロックに起因する問題の調査が容易になります。
今回は、CDDBASライブラリーのCDMAPファイルのロック情報を例にご説明します。
(1)あらかじめCDDBAS/CDMAPファイルに排他ロックをかけておきます。
ALCOBJ OBJ((CDDBAS/CDMAP *FILE *EXCLRD))
WRKOBJLCKコマンドで排他ロックがかかっていることを確認します。
WRKOBJLCK OBJ(CDDBAS/CDMAP) OBJTYPE(*FILE)
(2) SQLのSELECTステートメントでQSYS2/OBJ_LOCKファイルからロック情報を取得します。
SELECT * FROM QSYS2/OBJ_LOCK
WHERE SYS_DNAME = ‘CDDBAS’AND
SYS_ONAME = ‘CDMAP’ AND
OBJTYPE = ‘*FILE’
・SYS_DNAME:ロック対象のオブジェクトのライブラリー名を指定
・SYS_ONAME:ロック対象のオブジェクト名を指定
・OBJTYPE :ロック対象のオブジェクトのオブジェクト対応タイプを指定
ロック情報として、ロックの状態、ジョブ名、プログラム名などが取得できます。
ファイルのロック情報を確認できずにプログラムが異常終了するような場合は、QSYS2/OBJ_LOCKファイルからロック情報を取得してログ出力する仕組みなどを構築しておけば、待ちジョブの増加などの原因を短時間で特定することが期待できます。







