作業論理単位
リカバリー不能 リソース (Windows 2000 のシリアル・ファイルなど) を変更した場合、その変更は比較的永続的なものになります。コードでも EGL ランタイム・サービスでも、この変更結果を予告なく取り消すことはできません。 リカバリー可能 リソース (データベースなど) を変更した場合、コードまたは EGL ランタイム・サービスでは、変更をコミットして永続的なものにするか、変更をロールバックして、最後に変更がコミットされた時点で有効であった内容に戻すかのいずれかができます。
- リレーショナル・データベース
- リカバリー可能として構成されている CICS® キューまたはファイル。
- DL/I データベースおよび GSAM ファイル (場合による)
- WebSphere® MQ メッセージ・キュー (ご使用の MQ レコードで指定する場合を除く)
- 代替 PCB に送られる出力。代替 PCB は、ターゲット・システムが IMS™ BMP または IMS/VS の場合に使用可能です。
- コードで sysLib.commit() または sysLib.rollback() システム関数が呼び出され、変更内容がコミットまたはロールバックされた場合。
- コードで処理されないハード・エラーに応答して、EGL ランタイム・サービスがロールバックを実行した場合。 この場合、実行単位内のすべてのプログラムがメモリーから除去されます。
- 暗黙的コミットが実行された場合 (以下のようなケース)。
- 実行単位が正常に終了した場合。『実行単位』を参照してください。
- プログラムが show 文を発行した場合。
- プログラムが transfer to transaction 文を発行した場合。ケースごとに以下のような違いがあります。
- CICS または IMS/VS で実行されるプログラムでは、制御権移動により常にコミットが行われます。
- その他のプログラムでは、synchOnTrxTransfer ビルド記述子オプションの値が YES の場合にのみ、制御権移動によりコミットが行われます。
- JSF ハンドラーが forward 文を発行したときや、VGWebTransaction プログラムが converse 文を発行したときなど、Web ページが表示された場合。
- プログラムがセグメント化されたプログラムとして機能しているときに、テキスト UI プログラムが converse 文を発行した場合。
プログラムがトランザクション環境 (CICS、IMS、または iSeries) で実行されている場合、 EGL は、実行単位内のすべてのリソース・マネージャー間およびすべてのプログラム間で調整された 2 フェーズ・コミットを実行する環境コミットを発行します。 非トランザクション環境では、EGL は各リカバリー可能リソース・マネージャーを別々に呼び出す単一フェーズ・コミットを 実行します。
- この機能を有効にするには、ELACPIOP サンプル JCL を使用して ELARPIOP の新しいバージョンを作成します。ELACPIOP サンプル JCL は、IBM Rational COBOL Runtime for zSeries 製品のカスタマイズ中に作成される ELAJCL データ・セットです。次の 2 つから選択できます。
- プログラム・ディレクトリーのセクション 6.2.1.2.2 に指定されているインストールのカスタマイズを繰り返すか、または
- 以下に示すように、ELACPIOP JCL を変更して RRSAF=Y パラメーターを追加します。
ELARMIOP NLS=ENU,EOF=N,SCFOLD=Y,IMSESA=N,SEGMSG=N, X MSGTRN=ELAE,TRBUF=64,TSQUE=32,RRSAF=Y
- RRSAF の使用を有効にするには、以下のファイルを変更する必要があります。
- プログラムをプリコンパイルするために使用する JCL または EGL ビルド・スクリプト、および
- バッチ・ジョブを実行するために使用する実行 JCL
さらに詳しい説明は、DB2 RRSAF の資料にあります。
- 先述した EGL サポートは、暗黙的な RRSAF データベース接続のみが対象です。RRSAF でコードを実行する際に明示的なデータベース接続を使用する場合は、EGL プログラムを更新する必要があります。
さらに詳しい説明は、DB2 RRSAF の資料にあります。
- EGL プログラムが非 EGL プログラムを呼び出し、両方のプログラムが SQL テーブルにアクセスする場合、非 EGL プログラムが コミットまたはロールバックを発生させるときは、呼び出しの前にカーソルをすべてクローズする必要があります。
- 非トランザクション環境で、実行単位内のどの EGL プログラムも SQL を実行しないが、SQL I/O を実行する非 EGL プログラムへの呼び出しまたは制御権移動は行われるという場合、EGL は実行単位の終わりでコミットを実行しません。
互換性
| プラットフォーム | 問題 |
|---|---|
| Java™ 生成 |
|
| CICS | CICS の実行単位では、一度に 1 つの DB2® UDB データベースのみを使用できます。以下のような自動処理が実行されます。
次の場合にコミットが発生します。
これらは、DL/I 処理に関連しています。
|
| IMS BMP | sysLib.commit() は、トランザクション指向の BMP プログラムでは無視されます。
これらのプログラムでは、get next 文を使用して入出力 PCB に関連付けられたシリアル・ファイルを読み取ります。
それらのプログラムの場合は、以下の任意の状態の場合にシステムがコミットを実行します。
GSAM ファイルは、基本 CHKP とともに使用すると、リカバリー不可になります。 GSAM ファイルをリカバリー可能にするには、シンボリック・チェックポイントに sysLib.commit() ではなく、dliLib.AIBTDLI()、dliLib.EGLTDLI()、または vgLib.VGTDLI() を使用します。 |
| IMS/VS | sysLib.commit() は無視されます。
コミット処理は、次のような暗黙的コミット点でのみ行われます。
作業論理単位に関しては、明示的なチェックポイント・コマンド (CHXP) を実行することにより、入出力 PCB に get unique (GU) 呼び出しが実行され、コミットが実行されます。
次の点に注意してください。
|
| iSeries COBOL | 暗黙的コミットは、以下の状況で発行されます。
プログラムが SQL 要求を発行した場合に sysLib.commit() を呼び出すと SQL COMMIT WORK 文が実行されます。 プログラムが SQL 要求を発行していない場合に、sysLib.commit()を呼び出した場合は、iSeries COMMIT コマンドに相当するものになります。 |
| z/OS® バッチ | プログラムが PSB は指定していないが、SQL 要求は発行した場合、sysLib.commit() を呼び出すと、SQL COMMIT WORK 文が実行されます。 プログラムで PSB を指定している場合、sysLib.commit() を呼び出すと DL/I 基本 CHKP 呼び出しが実行されます。 これにより、すべてのデータベースに対する変更がコミットされます。 dliLib.psbData.psbName 構造の内容が、CHKP 呼び出しでチェックポイント識別子として機能します。 GSAM ファイルは、基本 CHKP とともに使用すると、リカバリー不可になります。 GSAM ファイルをリカバリー可能にするには、シンボリック・チェックポイントに sysLib.commit() ではなく、dliLib.AIBTDLI()、dliLib.EGLTDLI()、または vgLib.VGTDLI() を使用します。 |