IMS データベースにアクセスするエンタープライズ サーバー アプリケーションに使用されるデータベース ロッキングのタイプは、排他的または共有のいずれかのアクセス モードに基づきます。
排他的アクセス モードのロッキング
排他的アクセス モードは管理ツール、ユーティリティ、バッチ アプリケーション プログラムに使用します。排他的アクセスは IMS データベースをデータベース レベルでロックします。データベースは非共有モードにあり、単一のプロセスでのみ利用可能です。このアクセスでは、データベースがエンタープライズ サーバーで停止状態にある必要があります。排他的アクセス プロセスの例を次に示します。
- IMS データベース エディタ ツール
- このツールは Enterprise Developer IDE からのみ利用でき、IDE プロセスが排他的に所有します。
- IMS データベース ユーティリティ (IMSDBU)
- JCL、コマンド ライン、または Enterprise Developer IDE からアクセスできます。IMS データベースのデータは IMSDBU によって排他的に開かれ、IMSDBU が呼び出されたプロセスで所有されます。
- バッチ アプリケーション プログラム
- JES イニシエータで実行する DLI または DBB のバッチ アプリケーション プログラムは、IMS データベース制御プロセスを使用して、JCL イニシエータで実行するアプリケーション プログラムの代わりにデータベースのデータを排他的に開きます。加えて、次のいずれかの方法を使用できます。
- IMSLOCK DD 文
- JES イニシエーターですべての IMS DB 呼び出しをまとめて処理するバッチ プログラムの実行が指示され、パフォーマンスが大幅に向上します。この機能を使用するには、次の項目を JCL に追加します。
//IMSLOCK DD *
(EXCLUSIVE | SHAREDGO)
/*
- EXCLUSIVE
-
- バッチ処理のパフォーマンスが最高
- データベースへの排他的アクセスが必要
- GO 共有を許可しない
- ES_IMS_ LOCALDLI 環境変数を設定した場合に等しい
- SHAREDGO
- 共有取得のみ (ダーティ リード)。これはデフォルトです。
- ES_IMS_LOCALDLI 環境変数
- 非推奨。JES イニシエーターですべての IMS DB 呼び出しをまとめて処理するバッチ プログラムの実行を指示します。実行前に、バッチ プログラムからアクセスされるすべての IMS DB 制御プロセスを停止する必要があります。プログラムが終了するまで、これらのプロセスは JES によって排他的に所有されるようになるためです。
共有アクセス モードのロッキング
共有アクセス モードは、IMS トランザクション、CICS トランザクション、IMS BMP などのオンライン プログラムに使用されます。
要件
共有アクセスの要件は次のとおりです。
- IMS データベースにアクセスするアプリケーションは、エンタープライズ サーバー インスタンスで実行している
- データベースは停止状態にない
共有アクセスのいくつかの例を次に示します。
- IMS トランザクション (MPP)
- バッチ メッセージ処理プログラム (BMP)
- CRUN からの CICS トランザクションおよびバッチ プログラム
- AERTDLI または DDBA インターフェイスを使用する JES イニシエータからの ODBA アプリケーション
ロッキング
共有アクセス モードでは、IMS データベース ロッキングがデータベース レコード レベルで発生します。データベース レコードには、ルート セグメントとすべての従属セグメントが含まれています。2 次索引データベースは、1 次データベースでターゲット セグメントのデータベース レコードをロックします。論理関係は、論理子セグメントを定義するデータベース レコードと、宛先である親セグメントのデータベース レコードの両方をロックします。
DLI 呼び出しの処理中にロックされたレコードが検出されると、データベース制御がロック再試行の状態になります。この再試行は、レコードのロックが解除されるかまたは待ち時間が経過するまで続きます。待ち時間は、環境変数によって制御します。
ES_IMS_LOCK_TIMEOUT=n
ここで n は、0 ~ 65535 の範囲の秒数になります。デフォルト値は 30 秒です。値 0 は、無限の待ち時間を示します。
ロック再試行アルゴリズムはパフォーマンスの面でも調整できます。この遅延間隔は再試行の頻度を制御し、環境変数によって外部的に制御できます。
ES_IMS_LOCK_RETRY_DELAY=n
ここで n は、0 ~ 65535 の範囲のミリ秒数になります。デフォルトの再試行遅延は 5 ミリ秒です。
ロック待ち時間が経過すると、BD ステータス コードが DLI 呼び出しに対して返され、エラー メッセージがサーバー コンソールに書き込まれます。通常はロック待ち時間が経過することはないため、この状況では調査が必要です。待ち時間経過の原因には、ロックを保持しているアプリケーションが別のリソース マネージャーによるリソース上で待機しているか、または他の理由で中断している場合が考えられます。これらの状態は、他のマシンの活動によってシステムが CPU 枯渇状態になり結果的にアプリケーションが一時停止するときにも生じる場合があります。これは、ロック タイムアウトの値を延長することで修正できます。
ロック タイムアウトの問題を診断できるようにするために、タイムアウトが検出されると次の環境変数がシステム ダンプをトリガーします。
ES_IMS_DUMP_ON_TIMEOUT=1
共有アクセス データベースは、従来モードまたは IRLM の 2 つのロック モードのいずれかを使用できます。ロッキング モードは、エンタープライズ サーバー起動時に IMS データベース制御に定義されます。