MQBACK - バックアウトの変更
MQBACK 呼び出しは、最後の同期点以降に発生したメッセージの読み取りと書き込みをすべてバックアウトすることをキュー・マネージャーに示します。
- z/OS® では、この呼び出しはバッチ・プログラム (IMS™ バッチ DL/I プログラムを含む) でのみ使用されます。
- IBM® i では、この呼び出しは互換モードで実行しているアプリケーションではサポートされません。
構文
MQBACK (Hconn, Compcode, Reason)
パラメーター
- Hconn
- タイプ: MQHCONN - 入力
このハンドルは、キュー・マネージャーに対する接続を表します。Hconn の値は、 先行の MQCONN または MQCONNX 呼び出しによって戻されたものです。
- Compcode
- タイプ: MQLONG - 出力完了コード。以下のいずれかです。
- MQCC_OK
- 正常終了。
- MQCC_FAILED
- 呼び出しに失敗。
- Reason
- タイプ: MQLONG - 出力CompCode が MQCC_OK の場合、次のようになります。
- MQRC_NONE
- (0, X'000') レポートする理由コードはありません。
CompCode が MQCC_FAILED の場合、次のようになります。- MQRC_ADAPTER_SERV_LOAD_ERROR
- (2130, X'852') アダプター・サービス・モジュールをロードできません。
- MQRC_API_EXIT_ERROR
- (2374, X'946') API 出口で障害が発生しました。
- MQRC_ASID_MISMATCH
- (2157, X'86D') 1 次 ASID とホーム ASID が異なっています。
- MQRC_CALL_IN_PROGRESS
- (2219, X'8AB') 前の呼び出しが完了する前に MQI 呼び出しが入力されました。
- MQRC_CF_STRUC_IN_USE
- (2346, X'92A') カップリング・ファシリティー構造が使用中です。
- MQRC_CONNECTION_BROKEN
- (2009, X'7D9') キュー・マネージャーとの接続が失われました。
- MQRC_ENVIRONMENT_ERROR
- (2012, X'7DC') この環境では呼び出しが無効です。
- MQRC_HCONN_ERROR
- (2018, X'7E2') 接続ハンドルが無効です。
- MQRC_OBJECT_DAMAGED
- (2101, X'835') オブジェクトが損傷しました。
- MQRC_OUTCOME_MIXED
- (2123, X'84B') コミットまたはバックアウト操作の結果が混在している。
- MQRC_Q_MGR_STOPPING
- (2162, X'872') キュー・マネージャーのシャットダウン中。
- MQRC_RESOURCE_PROBLEM
- (2102, X'836') 使用できるシステム・リソースが不足しています。
- MQRC_STORAGE_MEDIUM_FULL
- (2192, X'890') 外部ストレージ・メディアが満杯です。
- MQRC_STORAGE_NOT_AVAILABLE
- (2071, X'817') ストレージが不足しています。
- MQRC_UNEXPECTED_ERROR
- (2195, X'893') 予期しないエラーが発生しました。
これらのコードの詳細については、 理由コードを参照してください。
使用上の注意
- この呼び出しは、キュー・マネージャーそのものが作業単位を調整するときにのみ使用できます。
次のタイプがあります。
- ローカル作業単位 (変更内容は MQ リソースにのみ影響を及ぼす)。
- グローバル作業単位 (変更内容が、MQ リソースだけでなく、他のリソース・マネージャーに属するリソースにも影響を及ぼす場合がある)。
- キュー・マネージャーが作業単位を調整しない環境では、MQBACK ではなく適切なバックアウト呼び出しを使用してください。
この環境ではまた、アプリケーションの異常終了を原因とする暗黙的バックアウトをサポートすることもできます。
- z/OS では、以下の呼び出しを使用してください。
- 作業単位が MQ リソースに対してだけ影響を及ぼす場合は、バッチ・プログラム (IMS バッチ DL/I プログラムを含む) で MQBACK 呼び出しを使用できます。ただし、作業単位が MQ リソースだけでなく他のリソース・マネージャー (DB2® など) に属するリソースにも影響を及ぼす場合には、z/OS Recoverable Resource Service (RRS) が提供する SRRBACK 呼び出しを使用してください。 SRRBACK 呼び出しは、RRS 調整に使用可能になっているリソース・マネージャーに属するリソースの変更をバックアウトします。
- CICS アプリケーションでは、EXEC CICS SYNCPOINT ROLLBACK コマンドを使って作業単位をバックアウトする必要があります。 CICS アプリケーションに MQBACK 呼び出しを使用しないでください。
- IMS アプリケーション (バッチ DL/I プログラム以外) では、ROLB などの IMS 呼び出しを使って作業単位をバックアウトする必要があります。 IMS アプリケーション (バッチ DL/I プログラム以外) には、MQBACK 呼び出しを使用しないでください。
- IBM i では、この呼び出しはキュー・マネージャーで調整されるローカル作業単位で使用してください。つまり、コミットメント定義はジョブ・レベルでは存在することができません。 これは、STRCMTCTL コマンドに CMTSCOPE(*JOB) パラメーターを指定してジョブに対して発行できなかったということです。
- z/OS では、以下の呼び出しを使用してください。
- 作業単位内にあるコミットされていない変更内容でアプリケーションが終了する場合、それらの変更内容の後処理は、そのアプリケーションが正常に終了するか、異常終了するかで異なります。詳細については、MQDISC - キュー・マネージャーの切断の使用上の注意を参照してください。
- アプリケーションでグループ内のメッセージまたは論理メッセージのセグメントの書き込みまたは読み取りを行う場合、キュー・マネージャーは、最後に MQPUT および MQGET 呼び出しが正常に実行されたメッセージ・グループに関する情報を保存します。この情報は、キュー・ハンドルに関する次のような情報です。
- MQMD 内の GroupId、MsgSeqNumber、Offset、および MsgFlags フィールドの値。
- そのメッセージが作業単位の一部であるかどうか。
- MQPUT 呼び出しについて、そのメッセージが持続メッセージか、非持続メッセージか。
- 最後に正常に実行された MQPUT 呼び出し (これは作業単位の一部である場合があります)。
- 最後に正常に実行された MQGET 呼び出しのうちキューからメッセージを削除したもの (作業単位の一部である場合があります)。
- 最後に正常に実行された MQGET 呼び出しのうちキュー上のメッセージをブラウズしたもの (これが作業単位の一部であることはありません)。
- MQGET 呼び出しについての情報は、現行作業単位内のそのキュー・ハンドルについて最初に正常に実行された MQGET 呼び出し以前の値に復元されます。
作業単位の開始後にアプリケーションによって更新されたキューであっても、 それが作業単位の有効範囲外である場合は、その作業単位がバックアウトされても、グループおよびセグメント情報は復元されません。
作業単位のバックアウト時にグループおよびセグメント情報が以前の値に復元されると、アプリケーションで大きなメッセージ・グループまたは数多くのセグメントで構成される大きな論理メッセージをいくつかの作業単位にまたがって保存できます。また、それらの作業単位に障害が発生しても、そのメッセージ・グループまたは論理メッセージ内の正しい点でアプリケーションを再始動できます。
ローカル・キュー・マネージャーのキュー・ストレージが限られている場合には、いくつかの作業単位を使用する方が有効となる場合があります。ただし、システム障害が発生した場合に各メッセージの書き込みまたは読み取りを正しい時点で再始動できるようにするには、アプリケーションで十分な情報を維持している必要があります。
システム障害後に正しい時点から再始動する方法の詳細については、MQPMO - メッセージ書き込みオプションで説明している MQPMO_LOGICAL_ORDER オプションと、MQGMO - 読み取りメッセージ・オプションで説明している MQGMO_LOGICAL_ORDER オプションを参照してください。
次の使用上の注意は、キュー・マネージャーで作業単位を調整する場合にのみ適用されます。
- 作業単位の 1 つには、1 つの接続ハンドルと同じ有効範囲があります。特定の作業単位に影響を与えるすべての MQ 呼び出しは、同じ接続ハンドルを使用して実行しなければなりません。 別の接続ハンドルを用いて呼び出しを発行すると (例えば、別のアプリケーションで呼び出しを発行する)、別の作業単位に影響が及びます。接続ハンドルの有効範囲の詳細については、MQCONN - キュー・マネージャーの接続で説明している Hconn パラメーターを参照してください。
- この呼び出しで影響を受けるメッセージは、現行の作業単位の一部として書き込まれたメッセージ、または取り出されたメッセージに限られます。
- 長時間実行しているアプリケーションが、1 つの作業単位に対して MQGET、MQPUT、または MQPUT1 呼び出しを発行する一方、コミット呼び出しまたはバックアウト呼び出しを一度も発行しない場合には、キューが他のアプリケーションでは使用できないメッセージで満杯になることがあります。この可能性から保護するために、管理者は、MaxUncommittedMsgs キュー・マネージャー属性を、ランナウェイ・アプリケーションがキューを満杯にしない程度の低い値に、かつ予期されるメッセージ交換アプリケーションが正常に作動できる程度に高い値に設定する必要があります。
C 言語での呼び出し
MQBACK (Hconn, &CompCode, &Reason);
MQHCONN Hconn; /* Connection handle */
MQLONG CompCode; /* Completion code */
MQLONG Reason; /* Reason code qualifying CompCode */
COBOL での呼び出し
CALL 'MQBACK' USING HCONN, COMPCODE, REASON.
** Connection handle
01 HCONN PIC S9(9) BINARY.
** Completion code
01 COMPCODE PIC S9(9) BINARY.
** Reason code qualifying COMPCODE
01 REASON PIC S9(9) BINARY.
PL/I での呼び出し
call MQBACK (Hconn, CompCode, Reason);
dcl Hconn fixed bin(31); /* Connection handle */
dcl CompCode fixed bin(31); /* Completion code */
dcl Reason fixed bin(31); /* Reason code qualifying CompCode */
高水準アセンブラー呼び出し
CALL MQBACK,(HCONN,COMPCODE,REASON)
HCONN DS F Connection handle
COMPCODE DS F Completion code
REASON DS F Reason code qualifying COMPCODE
Visual Basic での呼び出し
MQBACK Hconn, CompCode, Reason
Dim Hconn As Long 'Connection handle'
Dim CompCode As Long 'Completion code'
Dim Reason As Long 'Reason code qualifying CompCode'
資料