非 CICS 環境の場合の DL/I の考慮事項

非 CICS 環境では、PSB スケジューリングは CICS® 環境とは異なる方法で処理されます。 以下のセクションでは、PSB スケジューリングと、実行時の代替 PSB の使用について説明します。

PSB スケジューリングについて

IMS/VS、IMS™ BMP、および z/OS® バッチのプログラム実行中に、DL/I の初期化によって、単一の PSB がスケジュールされます。 この PSB は、1 つのバッチ・ジョブ・ステップまたは IMS トランザクションに対してのみ使用可能なものです。

実行単位内のすべての EGL プログラムおよび非 EGL プログラムは、同じ PSB を共用する必要があります。 実行単位には、プログラムへ制御権移動 の形式で transfer 文を 使用して呼び出されるか移動先になるすべてのプログラムが含まれます。 IMS BMP および z/OS バッチの場合は、実行単位には、 トランザクションへ制御権移動 の形式で transfer 文を使用して移動先となるすべてのプログラムも含まれます。 IMS/VS の場合、トランザクションへ制御権移動 の形式で transfer 文を使用して移動する先のプログラムは、移動元のプログラムとは異なる実行単位にあります。

IMS/VS の場合は、IMS システム定義で使用する PSB を指定します。 IMS PSB は、プログラム名と同じ名前でなければなりません。 PSB は、IMS トランザクションの開始時にスケジュールされます。

IMS BMP および z/OS バッチの場合は、バッチ・ジョブの実行に使用される JCL で、使用する PSB 名を指定します。 PSB は、IMS BMP または z/OS バッチ・ジョブの開始時にスケジュールされます。

コミット点および作業論理単位について

作業論理単位 (LUW) は、コミット点またはロールバックが発生するたびに終了します。

コミット点は、以下のイベントのうち 1 つ以上が起こるときに発生します。
  • 実行単位内のトップレベルのプログラムが正常に終了したとき。

    z/OS バッチと IMS BMP の場合、 実行単位は、transfer 文または call 文を使用して制御権移動を相互に行うすべての EGL プログラムと非 EGL プログラムから構成されます。 非 EGL プログラムの場合は、OS XCTL マクロまたは call 文を使用するすべての移動もこれに含まれます。

    IMS/VS の場合、実行単位は単一トランザクションに相当し、 プログラムへの制御権移動形式の transfer 文または call 文を使用して制御権移動を相互に行うすべての EGL プログラムおよび非 EGL プログラムから構成されます。 非 EGL プログラムの場合は、call 文を 使用するすべての移動もこれに含まれます。

  • プログラムが converse I/O 文を使用して、 以下のどちらかが 1 に設定されたとき。
    • converseVar.segmentedMode (プログラムがセグメントとして定義されている場合は、デフォルトで 1 に設定)
    • converseVar.commitOnConverse
    コミット点の発生に最も適しているのは、端末出力の後と、次の端末入力の前です。 端末 I/O でのコミット点はデータベースへの更新を同期化し、 プログラム・ユーザーに対して確認メッセージが表示されます。
  • z/OS バッチおよび バッチ指向の IMS BMP プログラムの場合で、プログラムが、トランザクションへ制御権移動 の形式の transfer 文を使用して移動を行い、移動元プログラムに対して synchOnTrxTransfer 生成オプションが YES に設定されているとき。
  • プログラムが sysLib.commit() 関数または COMMIT サービスを呼び出すとき。

    z/OS バッチの場合、 DL/I を使用しない EGL プログラムは、プログラムが SQL テーブルに対して変更を行った場合にのみ、 コミット点を発行します。 コミット点は、非 EGL プログラムによって行われた SQL テーブルへの変更の場合には発生しません。

    IMS/VS およびトランザクション指向 IMS BMP プログラム (I/O PCB と関連付けられたシリアル・ファイルをスキャンするプログラム) の場合、sysLib.commit() は無視されます。 コミット点は、I/O PCB に対して GU (get unique) 呼び出しが行われるたびに発生します。

  • IMS/VS およびトランザクション指向 IMS BMP プログラムの場合、 プログラムが I/O PCB に対する get unique を正常に行ったとき。
ロールバックは、以下のイベントのうち 1 つ以上が起こるときに発生します。
  • EGL プログラムが sysLib.rollback() 関数を呼び出したとき。
  • エラー状態のため、プログラムが終了したとき。
ロールバックが発生すると、LUW の開始以降にデータベースおよびリカバリー可能ファイルに対して行われた すべての変更がバックアウトされます。 ロールバックは、VSE バッチ環境の DL/I データベースには影響を及ぼしません。

シンボリック・チェックポイント関数および再開関数の使用 (z/OS バッチおよび IMS BMP のみ)

バッチ・プログラムを実行する場合は、sysLib.commit() を使用して定期的にデータベースの更新をコミットできます。 もしくは、EGLTDLI() を使用してシンボリック・チェックポイント関数と再開関数を実装することもできます。 sysLib.commit() とシンボリック・チェックポイント関数は、両方ともにデータベースの更新をコミットします。 ただし、シンボリック・チェックポイント関数により、 制御合計や、コミット点の発生時に処理された最後のデータベース・レコードのキーなどの情報を保存することも可能になります。 プログラムは、正常に完了しない場合、最後のコミット点にバックアウトされます。 シンボリック・チェックポイントを使用して情報を保存した場合は、 プログラムを再開するときに、DL/I 再開 (XRST) 呼び出しを使用して、保存されたデータを復元できます。 この情報を使用して、処理が停止したデータベース内ポイントで処理を再開できます。

関連概念:
DL/I データベース・サポート

関連項目:
call
converse
CICS 環境のための DL/I 考慮事項
EGLTDLI()
transfer

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.