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

一部のイベント (例: 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 ロギングは適格なリソース マネージャーに対して有効です。このサポートがパフォーマンスに影響する環境では、[Enterprise Server General Configuration] 領域で [ES-Environment] タグの下に次の環境変数を追加することで、このサポートを無効にできます。
ES_XA_LOG_SUPPRESS=Y