XA および in-doubt トランザクション

一部のイベント (SEP の予想外の強制終了など) は 'in-doubt' トランザクションの原因になることがあります。'in-doubt' トランザクションとは、複合トランザクション内のすべての部分が、参加しているすべてのリソース マネージャーをとおしてコミットされていない状態を指します。

リソース マネージャーに in-doubt トランザクションが残された場合、これらは内部トランザクションによって回復され、コンソール ログで報告されます。
CASXO0027I XA recovery committed in-doubt transaction 177969 branch 1 on RM ESMQXA4 16:17:38 
CASXO0027I XA recovery committed in-doubt transaction 177969 branch 1 on RM XADB2 16:17:38   
そのような障害発生後に Enterprise Server を起動すると、発生した可能性のある in-doubt トランザクションがコンソール ログで報告されます。
CASXO0029I XA log reported in-doubt transaction 177969 branch 1 16:30:33 
CASXO0029I XA log reported in-doubt transaction 249152 branch 3 16:30:33
その後、起動プロセス中にリソース マネージャーが回復され、この動作がコンソール ログで報告されます。
CASXO0027I XA recovery committed in-doubt transaction 249152 branch 3 on RM ESMQXA4 16:30:41
CASXO0027I XA recovery committed in-doubt transaction 249152 branch 3 on RM XADB2 16:30:41

再起動中、リソース マネージャーは上記の 177969 branch 1 トランザクションを認識していません。クラッシュ前にこのトランザクションは内部 XA 回復トランザクションによって回復されたためです。

この例は、トランザクションが最終的にコミットされたものの、ロールバックの処理と報告も必要になった状況を示しています。
CASXO0028I XA recovery rolled back in-doubt transaction 182303 branch 1 on RM ESMQXA4 16:18:10
CASXO0028I XA recovery rolled back in-doubt transaction 182303 branch 1 on RM XADB2 16:18:10

XA ロギング

XA ロギングは in-doubt トランザクションの回復をサポートするためのメカニズムです。次の場合、XA ロギングは一切行われません。
  • xa_recover() の機能がある RM スイッチ モジュールが構成されていない。
または
  • スイッチ モジュールが xa_prepare() 中に XA_RDONLY を報告する。
または
  • RM が現在のトランザクションに対して動的に登録されていない。

in-doubt XA トランザクション回復の構成

デフォルトで、XA ロギングは、xa_recovery() の呼び出しに応答するように構成されたスイッチ モジュールを持つ適格なリソース マネージャーに対して有効です。このロギングにより、DB2 や MQ などのリソース マネージャーに in-doubt トランザクションを残す障害から回復できます。環境によっては、ロギングでパフォーマンスが低下する可能性があります。ロギングは次の手順で無効にできます。
  1. Enterprise Server Administration ページで、ロギングを無効にする エンタープライズ サーバー リージョン の [Edit] をクリックします。
  2. [General] タブをクリックします。
  3. [Configuration Information] フィールドに、次のように入力します。
    [ES-Environment] 
    ES_XA_LOG_SUPPRESS=Y
  4. [Apply] をクリックします。
  5. [OK] をクリックします。