MQCMIT - 変更のコミット

MQCMIT 呼び出しは、アプリケーションが同期点に達したこと、および最後の同期点以降に発生したメッセージの読み取りと書き込みをすべて永続化することをキュー・マネージャーに示します。

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

構文

MQCMIT(HconnCompCodeReason)

パラメーター

Hconn
タイプ: MQHCONN - 入力

このハンドルは、キュー・マネージャーに対する接続を表します。 Hconnの値は、先行の MQCONN または MQCONNX 呼び出しによって戻されたものです。

CompCode
タイプ: MQLONG - 出力
完了コード。以下のいずれかです。
MQCC_OK
正常終了。
MQCC_WARNING
警告 (部分完了)。
MQCC_FAILED
呼び出し失敗。

理由
タイプ: MQLONG - 出力

次に示す理由コードは、キュー・マネージャーが Reason パラメーターに対して返すことのある理由コードです。

CompCodeが MQCC_OK の場合:
MQRC_NONE
(0, X'000') レポートする理由コードはありません。
CompCodeが MQCC_WARNING の場合:
MQRC_BACKED_OUT
(2003, X'7D3') 作業単位がバックアウトされた。
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_CALL_INTERRUPTED
(2549, X'9F5') MQPUT または MQCMIT が中断されたため、再接続処理で確実な成果を再び得ることができない。
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_RECONNECT_FAILED
(2548, X'9F4') 再接続後、再接続可能な接続のハンドルの復元中にエラーが発生した。
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. この呼び出しは、キュー・マネージャーそのものが作業単位を調整するときにのみ使用します。 次のタイプがあります。
    • ローカル作業単位。この場合、変更は IBM® MQ リソースにのみ影響します。
    • グローバル作業単位。変更は、 IBM MQ リソースに影響を与えるだけでなく、他のリソース・マネージャーに属するリソースにも影響を与える可能性があります。
    ローカルおよびグローバル作業単位について詳しくは、 MQBEGIN-作業単位の開始を参照してください。
  2. キュー・マネージャーが作業単位を調整しない環境では、MQCMIT ではなく適切なコミット呼び出しを使用する必要があります。 この環境ではまた、アプリケーションの正常終了を原因とする暗黙的コミットをサポートしている場合もあります。
    • z/OS では、以下の呼び出しを使用します。
      • 作業単位が IBM MQ リソースにのみ影響する場合、バッチ・プログラム ( IMS バッチ DL/I プログラムを含む) は MQCMIT 呼び出しを使用できます。 ただし、作業単位が IBM MQ リソースと、他のリソース・マネージャーに属するリソース (例えば、 Db2® ) の両方に影響を与える場合は、 z/OS リカバリー可能リソース・サービス (RRS) によって提供される SRRCMIT 呼び出しを使用してください。 SRRCMIT 呼び出しは、RRS 調整に使用可能になっているリソース・マネージャーに属するリソースの変更をコミットします。
      • CICS® アプリケーションは、 EXEC CICS SYNCPOINT コマンドを使用して作業単位を明示的にコミットする必要があります。 また、トランザクションを終了すると、作業単位が暗黙的にコミットされます。 CICS アプリケーションで MQCMIT 呼び出しを使用することはできません。
      • IMS アプリケーション (バッチ DL/I プログラム以外) は、 GU および CHKP などの IMS 呼び出しを使用して、作業単位をコミットする必要があります。 IMS アプリケーション (バッチ DL/I プログラム以外) では、MQCMIT 呼び出しは使用できません。
    • IBM iでは、キュー・マネージャーによって調整されるローカル作業単位に対してこの呼び出しを使用します。 これは、コミットメント定義がジョブ・レベルで存在していてはならないことを意味します。つまり、CMTSCOPE(*JOB)パラメーターを指定したSTRCMTCTLコマンドがジョブに対して発行されていてはなりません。
  3. 作業単位内にあるコミットされていない変更内容でアプリケーションが終了する場合、それらの変更内容の後処理は、そのアプリケーションが正常に終了するか、異常終了するかで異なります。 詳しくは、 MQDISC の使用上の注意 を参照してください。
  4. アプリケーションでグループ内のメッセージまたは論理メッセージのセグメントの書き込みまたは読み取りを行う場合、キュー・マネージャーは、最後に MQPUT および MQGET 呼び出しが正常に実行されたメッセージ・グループに関する情報を保存します。 この情報は、キュー・ハンドルに関する次のような情報です。
    • MQMD 中のGroupIdMsgSeqNumberOffset、およびMsgFlagsフィールドの値。
    • そのメッセージが作業単位の一部であるかどうか。
    • MQPUT 呼び出しについて、そのメッセージが持続メッセージか、非持続メッセージか。

    作業単位がコミットされると、キュー・マネージャーは、グループおよびセグメント情報を保持し、アプリケーションは現行メッセージ・グループまたは論理メッセージの書き込みまたは読み取りを継続することができます。

    1 つの作業単位のコミット時にグループおよびセグメント情報を保持することにより、アプリケーションは、大きなメッセージ・グループまたは数多くのセグメントで構成される大きな論理メッセージを、いくつかの作業単位にスプレッドできます。 ローカル・キュー・マネージャーのキュー・ストレージが限られている場合には、いくつかの作業単位を使用する方が有効となります。 ただし、システム障害が発生した場合に各メッセージの書き込みまたは読み取りを正しい時点で再始動するには、アプリケーションで十分な情報を維持している必要があります。 システム障害後の正しいポイントで再始動する方法について詳しくは、 MQPMO_LOGICAL_ORDER および MQGMO_LOGICAL_ORDERを参照してください。

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

  5. 作業単位は、接続ハンドルと同じ有効範囲を持ちます。特定の作業単位に影響を与えるすべての IBM MQ 呼び出しは、同じ接続ハンドルを使用して実行する必要があります。 別の接続ハンドルを用いて呼び出しを発行すると (例えば、別のアプリケーションで呼び出しを発行する)、別の作業単位に影響が及びます。 接続ハンドルの有効範囲については、MQCONN の項で説明している Hconn パラメーターを参照してください。
  6. この呼び出しで影響を受けるメッセージは、現行の作業単位の一部として書き込まれたメッセージ、または取り出されたメッセージに限られます。
  7. 長時間実行しているアプリケーションで、1 つの作業単位に対して MQGET、MQPUT、または MQPUT1 呼び出しを発行している場合、コミット呼び出しまたはバックアウト呼び出しを一度も発行しないと、キューが他のアプリケーションでは使用できないメッセージで満杯になることがあります。 これが発生しないようにするには、アドミニストレーターは、MaxUncommittedMsgs キュー・マネージャー属性を、ランナウェイ・アプリケーションがキューを満杯にしない程度の低い値に、かつ予期されるメッセージ交換アプリケーションが正常に作動できる程度に高い値に設定する必要があります。
  8. [AIX、Linux、Windows] AIX®, Linux®, and Windows システムでは、 Reason パラメーターが MQRC_CONNECTION_BROKEN ( CompCode が MQCC_FAILED) または MQRC_UNEXPECTED_ERROR の場合、作業単位が正常にコミットされた可能性があります。

C 言語での呼び出し

MQCMIT (Hconn, &CompCode, &Reason);
パラメーターを次のように宣言します。
MQHCONN  Hconn;     /* Connection handle */
MQLONG   CompCode;  /* Completion code */
MQLONG   Reason;    /* Reason code qualifying CompCode */

COBOL での呼び出し

CALL 'MQCMIT' 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 MQCMIT (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 MQCMIT,(HCONN,COMPCODE,REASON)
パラメーターを次のように宣言します。
HCONN     DS  F  Connection handle
COMPCODE  DS  F  Completion code
REASON    DS  F  Reason code qualifying COMPCODE

Visual Basic での呼び出し

MQCMIT Hconn, CompCode, Reason
パラメーターを次のように宣言します。
Dim Hconn    As Long 'Connection handle'
Dim CompCode As Long 'Completion code'
Dim Reason   As Long 'Reason code qualifying CompCode'