一部のイベント (接続の切断、プロセスの停止、リソース マネージャーの障害など) によって、「未確定」XA トランザクションが発生する場合があります。このようなトランザクションは、XA トランザクションに参加する 1 つ以上の RM が完了していない場合や、同期ポイントの第 2 フェーズ (コミットまたはロールバック) で失敗した場合に発生します。この状況で、「準備完了」状態でリソース マネージャーに残っている XA トランザクションは、未確定トランザクションと呼ばれます。このような未確定トランザクションを解決することは、Micro Focus Enterprise Server などの XA トランザクション マネージャーの役割です。
XA トランザクションを回復するために、トランザクション マネージャーは同期ポイントに関連する XA 動詞の結果をログ記録します。この情報を使用して、未確定トランザクションが 1 つ以上のリソース マネージャーに残っている場合にそのトランザクションの同期ポイントを設定する方法が決定されます。リージョン起動中、SEP 異常終了時、または同期ポイントのフェーズ 2 で XA エラー RMFAIL および RMERR が返された場合、XA 回復トランザクションがトリガーされます。このシステム トランザクションは、XA ログに含まれている情報を使用して、リソース マネージャーから返された XA トランザクションをコミットまたはロールバックします。
XA トランザクションが回復すると、次のようなメッセージが表示されます。
CASXO0027I XA recovery committed in-doubt transaction 177969 branch 1 on RM XADB2 CASXO0027I XA recovery committed in-doubt transaction 249152 branch 3 on RM ESMQXA4 CASXO0027I XA recovery committed in-doubt transaction 1539000001 branch 3 on RM DB51
前回のリージョンの実行中に未確定トランザクションが発生した場合は、リージョンの起動時に、次のようなメッセージが表示されます。
CASXO0029I XA log reported in-doubt transaction 1443000001 branch 3 CASXO0029I XA log reported in-doubt transaction 03456 branch 1
これらの XA トランザクションは、前回のリージョンの実行中に解決済みまたは回復済みである可能性があります。解決されていない場合は、これらのメッセージが表示された直後に回復されます。その後、起動時に XA の回復が確認されたことを示す別のメッセージが表示されます。
CASXO0027I XA recovery committed in-doubt transaction 03456 branch 1 on RM XADB2
XA ロギングは未確定トランザクションの回復をサポートするためのメカニズムです。デフォルトでは、XA ロギングは、xa_recover エントリ ポイントを提供する RM に対して有効になっています。XA ロギングは、xa_recover() 機能を提供しない RM ではバイパスされます。
環境によっては、ロギングでパフォーマンスが低下する可能性があります。次の環境変数を設定すると、XA ロギングを無効にすることができます。
ES_XA_LOG_SUPPRESS=Y
2 フェーズ コミットのバッチ プログラム DSNRLI では、XA トランザクションに参加する RM が 1 つだけの場合、XA 処理が最適化されます。