MQBACK - バックアウトの変更

MQBACK 呼び出しは、最後の同期点以降に発生したメッセージの読み取りと書き込みをすべてバックアウトすることをキュー・マネージャーに示します。

作業単位の一部として書き込まれたメッセージは削除されます。作業単位の一部として取り出されたメッセージはキューに戻されます。
  • z/OS®では、この呼び出しはバッチ・プログラム ( IMS バッチ DL/I プログラムを含む) によってのみ使用されます。

構文

MQBACK (HconnCompcodeReason)

パラメーター

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') 予期しないエラーが発生しました。

これらのコードの詳細については、メッセージおよび理由コードを参照してください。

使用上の注意

  1. この呼び出しは、キュー・マネージャーそのものが作業単位を調整するときにのみ使用できます。 次のタイプがあります。
    • ローカル作業単位 (変更内容は MQ リソースにのみ影響を及ぼす)。
    • グローバル作業単位 (変更内容が、MQ リソースだけでなく、他のリソース・マネージャーに属するリソースにも影響を及ぼす場合がある)。
    ローカルおよびグローバル作業単位について詳しくは、 MQBEGIN-作業単位の開始を参照してください。
  2. キュー・マネージャーが作業単位を調整しない環境では、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コマンドがジョブに対して発行されていてはなりません。
  3. 作業単位内にあるコミットされていない変更内容でアプリケーションが終了する場合、それらの変更内容の後処理は、そのアプリケーションが正常に終了するか、異常終了するかで異なります。 詳しくは、 MQDISC-切断キュー・マネージャー の使用上の注意を参照してください。
  4. アプリケーションでグループ内のメッセージまたは論理メッセージのセグメントの書き込みまたは読み取りを行う場合、キュー・マネージャーは、最後に MQPUT および MQGET 呼び出しが正常に実行されたメッセージ・グループに関する情報を保存します。 この情報は、キュー・ハンドルに関する次のような情報です。
    • MQMD 中のGroupIdMsgSeqNumberOffset、およびMsgFlagsフィールドの値。
    • そのメッセージが作業単位の一部であるかどうか。
    • MQPUT 呼び出しについて、そのメッセージが持続メッセージか、非持続メッセージか。
    キュー・マネージャーは、次のものについて 1 つずつ、3 セットのグループおよびセグメント情報を保持しています。
    • 最後に正常に実行された MQPUT 呼び出し (これは作業単位の一部である場合があります)。
    • 最後に正常に実行された MQGET 呼び出しのうちキューからメッセージを削除したもの (作業単位の一部である場合があります)。
    • 最後に正常に実行された MQGET 呼び出しのうちキュー上のメッセージをブラウズしたもの (これが作業単位の一部であることはありません)。

  5. MQGET 呼び出しについての情報は、現行作業単位内のそのキュー・ハンドルについて最初に正常に実行された MQGET 呼び出し以前の値に復元されます。

    作業単位の開始後にアプリケーションによって更新されたキューであっても、 それが作業単位の有効範囲外である場合は、その作業単位がバックアウトされても、グループおよびセグメント情報は復元されません。

    作業単位のバックアウト時にグループおよびセグメント情報を以前の値に復元する機能により、アプリケーションは、数多くのセグメントで構成される大きなメッセージ・グループまたは大きな論理メッセージをいくつかの作業単位にまたがって広げることができます。そして、いずれかの作業単位が失敗しても、そのメッセージ・グループまたは論理メッセージ内の正しい点でアプリケーションを再始動できます。

    ローカル・キュー・マネージャーのキュー・ストレージが限られている場合には、いくつかの作業単位を使用する方が有効となる場合があります。 ただし、システム障害の発生時に各メッセージの書き込みまたは読み取りを正しい時点で再始動できるようにするには、アプリケーションが十分な情報を維持している必要があります。

    システム障害後の正しいポイントで再始動する方法について詳しくは、 MQPMO-メッセージ書き込みオプションで説明されている MQPMO_LOGICAL_ORDER オプション、および MQGMO-メッセージ読み取りオプションで説明されている MQGMO_LOGICAL_ORDER オプションを参照してください。

    次の使用上の注意は、キュー・マネージャーで作業単位を調整する場合にのみ適用されます。

  6. 作業単位の 1 つには、1 つの接続ハンドルと同じ有効範囲があります。 特定の作業単位に影響を与えるすべての MQ 呼び出しは、同じ接続ハンドルを使用して実行しなければなりません。 別の接続ハンドルを用いて呼び出しを発行すると (例えば、別のアプリケーションで呼び出しを発行する)、別の作業単位に影響が及びます。 接続ハンドルの有効範囲については、 MQCONN-接続キュー・マネージャー で説明されている Hconn パラメーターを参照してください。
  7. この呼び出しで影響を受けるメッセージは、現行の作業単位の一部として書き込まれたメッセージ、または取り出されたメッセージに限られます。
  8. 長時間実行しているアプリケーションが、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'