非 CICS 環境での PSB スケジューリング

非 CICS 環境では、PSB スケジューリングは CICS® 環境とは異なる方法で処理されます。

以下のセクションでは、PSB スケジューリング、および実行時における代替 PSB の使用について説明します。

PSB スケジューリング

IMS/VS、IMS™ BMP、および z/OS® バッチのためのプログラムの実行中に、DL/I の初期設定によって単一の PSB がスケジュールに入れられます。単一のバッチ・ジョブ・ステップまたは IMS トランザクションで使用できるのは、この PSB のみです。

実行単位内のすべての EGL プログラムおよび非 EGL プログラムが、同じ PSB を共用する必要があります。実行単位には、呼び出すプログラム、または transfer to program ステートメントを使用した転送の転送先プログラムがすべて組み込まれます。IMS BMP および z/OS バッチの場合、実行単位には、transfer to transaction ステートメントを使用した転送の転送先プログラムもすべて組み込まれます。IMS/VS の場合、transfer to transaction ステートメントを使用した転送先プログラムの実行単位は、転送元プログラムの実行単位とは異なります。

IMS/VS の場合は、IMS システム定義の PSB を指定してください。 IMS PSB の名前は、プログラム名と同じである必要があります。 PSB は、IMS トランザクションの開始時にスケジュールされます。

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

コミット点および作業論理単位

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

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

    z/OS バッチおよび IMSBMP の場合、実行単位は、transfer または call ステートメントを使用して互いの間で制御権を移動するすべての EGL プログラムおよび非 EGL プログラムで構成されます。 非 EGL プログラムの場合は、OS XCTL マクロまたは CALL ステートメントを使用した転送もすべて含まれます。

    IMS/VS では、実行単位は単一トランザクションに相当し、transfer to program ステートメントまたは call ステートメントを使用して互いに制御権を移動するすべての EGL プログラムと非 EGL プログラムで構成されます。 非 EGL プログラムの場合は、CALL ステートメントを使用した制御権の移動を含みます。

  • プログラムが converse ステートメントを使用したとき。
  • z/OS バッチおよびバッチ指向の IMS BMP プログラムの場合、プログラムが transfer to transaction ステートメントを使用して転送を行い、転送元プログラムの synchOnTrxTransfer ビルド記述子オプションが YES に設定されたとき。
  • プログラムが sysLib.commit 関数を呼び出したとき。

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

    IMS/VS およびトランザクション指向の IMS BMP プログラム (get next を使用して入出力 PCB と関連するシリアル・ファイルを読み取るプログラム) の場合、sysLib.commit は無視されます。 コミット点は、入出力 PCB に対する GU (get unique) 呼び出しのたびに発生します。

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

実行時における代替 PCB

実行時に実際に使用する DL/I PSB 名は、PSBRecord で PSB 名として指定した名前とは異なる場合があります。 IMS/VS の場合、実行時の実際の PSB は IMS システム定義によって制御され、プログラムの名前と一致している必要があります。IMS BMP および z/OS バッチの場合には、プログラムを実行する JCL で、実行時に実際に使用する PSB を指定してください。

プログラムが callInterface のタイプを CBLTDLI に設定する場合、PSBRecord 内の PCB の数、タイプ、および順序は、ランタイム PSB の情報と一致している必要があります。 データベース構成も一致している必要がありますが、PCB レコード名は、ランタイム PSB 内の名前と一致している必要はありません。詳しくは、ランタイム PSB および PCB のための EGL サポートを参照してください。

シンボリック・チェックポイントおよび再始動機能 (z/OS バッチおよび IMS BMP のみ)

バッチ・プログラムを実行する際には、sysLib.commit を使用して定期的にデータベースの更新をコミットすることができます。 またその代わりに dliLib.AIBTDLIdliLib.EGLTDLI、または vgLib.VGTDLI を使用して、シンボリック・チェックポイントおよび再始動機能を実装することもできます。

sysLib.commit とシンボリック・チェックポイント機能は、どちらもデータベースの更新をコミットします。 ただし、シンボリック・チェックポイント機能を使用すれば、照査合計や、コミット点が発生したときに処理された最後のデータベース・レコードのキーなどの情報を保存することもできます。 プログラムが正常に完了しない場合には、最後のコミット点までバックアウトします。シンボリック・チェックポイントを使用して情報を保存していた場合には、プログラムの再始動時に、DL/I 再始動 (XRST) 呼び出しを使用して保存したデータをリストアすることができます。この情報を使用して、データベース内の処理が停止したポイントから処理を再開します。

シンボリック・チェックポイントと再開の詳細については、IMS アプリケーション・プログラマー向けのマニュアルを参照してください。


フィードバック