MQBACK - バックアウトの変更
MQBACK 呼び出しは、最後の同期点以降に発生したメッセージの読み取りと書き込みをすべてバックアウトすることをキュー・マネージャーに示します。
- z/OS®では、この呼び出しはバッチ・プログラム ( IMS バッチ DL/I プログラムを含む) によってのみ使用されます。
構文
MQBACK (Hconn、 Compcode、 Reason)
パラメーター
- Hconn
- タイプ: MQHCONN - 入力
このハンドルは、キュー・マネージャーに対する接続を表します。
Hconnの値は、先行の MQCONN または MQCONNX 呼び出しによって戻されたものです。 - Compcode
- タイプ: MQLONG - 出力完了コード。以下のいずれかです。
- MQCC_OK
- 正常終了。
- MQCC_WARNING
- 警告 (部分完了)。
- MQCC_FAILED
- 呼び出し失敗。
- 理由
- タイプ: MQLONG - 出力
CompCodeが MQCC_OK の場合:- MQRC_NONE
- (0, X'000') レポートする理由コードはありません。
CompCodeが MQCC_WARNING の場合:- MQRC_OUTCOME_PENDING
- (2124, X'84C') バックアウト操作の結果が保留状態である。
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 リカバリー可能リソース・サービス (RRS) によって提供される SRRBACK 呼び出しを使用してください。 SRRBACK 呼び出しを実行すると、RRS 調整対応のリソース・マネージャーに属するリソースに対する変更がバックアウトされます。
- CICS®アプリケーションは、
EXEC CICS SYNCPOINT ROLLBACKコマンドを使用して作業単位をバックアウトする必要があります。 CICS アプリケーションには MQBACK 呼び出しを使用しないでください。 - IMSアプリケーション (バッチ DL/I プログラム以外) は、
ROLBなどのIMS呼び出しを使用して、作業単位をバックアウトする必要があります。 IMS アプリケーション (バッチ DL/I プログラム以外) には、MQBACK 呼び出しを使用しないでください。
- IBM® iでは、キュー・マネージャーによって調整されるローカル作業単位に対してこの呼び出しを使用します。 これは、コミットメント定義がジョブ・レベルで存在していてはならないことを意味します。つまり、CMTSCOPE(*JOB)パラメーターを指定した
STRCMTCTLコマンドがジョブに対して発行されていてはなりません。
- z/OS では、以下の呼び出しを使用します。
- 作業単位内にあるコミットされていない変更内容でアプリケーションが終了する場合、それらの変更内容の後処理は、そのアプリケーションが正常に終了するか、異常終了するかで異なります。 詳しくは、 MQDISC-切断キュー・マネージャー の使用上の注意を参照してください。
- アプリケーションでグループ内のメッセージまたは論理メッセージのセグメントの書き込みまたは読み取りを行う場合、キュー・マネージャーは、最後に MQPUT および MQGET 呼び出しが正常に実行されたメッセージ・グループに関する情報を保存します。 この情報は、キュー・ハンドルに関する次のような情報です。
- MQMD 中の
GroupId、MsgSeqNumber、Offset、およびMsgFlagsフィールドの値。 - そのメッセージが作業単位の一部であるかどうか。
- MQPUT 呼び出しについて、そのメッセージが持続メッセージか、非持続メッセージか。
- 最後に正常に実行された MQPUT 呼び出し (これは作業単位の一部である場合があります)。
- 最後に正常に実行された MQGET 呼び出しのうちキューからメッセージを削除したもの (作業単位の一部である場合があります)。
- 最後に正常に実行された MQGET 呼び出しのうちキュー上のメッセージをブラウズしたもの (これが作業単位の一部であることはありません)。
- MQMD 中の
- 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'