このページは機械翻訳したものです。
XA トランザクションは、次の各状態を経由して処理されます。
XA STARTを使用して、XA トランザクションを開始し、それをACTIVE状態にします。ACTIVEXA トランザクションに対しては、トランザクションを構成する SQL ステートメントを発行したあと、XA ENDステートメントを発行します。XA ENDは、トランザクションをIDLE状態にします。-
IDLEXA トランザクションに対しては、XA PREPAREステートメントまたはXA COMMIT ... ONE PHASEステートメントのどちらかを発行できます。XA PREPAREは、トランザクションをPREPARED状態にします。XA RECOVERではPREPARED状態の XA トランザクションがすべてリストされるため、この時点でのXA RECOVERステートメントの出力にはトランザクションのxid値が含まれます。XA COMMIT ... ONE PHASEは、トランザクションの準備とコミットを行います。 トランザクションが終了するため、xid値はXA RECOVERによってリストされません。
PREPAREDXA トランザクションに対しては、XA COMMITステートメントを発行してトランザクションをコミットおよび終了するか、またはXA ROLLBACKを発行してトランザクションをロールバックおよび終了することができます。
グローバルトランザクションの一部としてテーブルに行を挿入する単純な XA トランザクションを次に示します。
mysql> XA START 'xatest';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO mytable (i) VALUES(10);
Query OK, 1 row affected (0.04 sec)
mysql> XA END 'xatest';
Query OK, 0 rows affected (0.00 sec)
mysql> XA PREPARE 'xatest';
Query OK, 0 rows affected (0.00 sec)
mysql> XA COMMIT 'xatest';
Query OK, 0 rows affected (0.00 sec)
特定のクライアント接続のコンテキスト内では、XA トランザクションとローカル (非 XA) トランザクションは相互に排他的です。 たとえば、XA トランザクションを開始するために XA START が発行された場合は、その XA トランザクションがコミットまたはロールバックされるまでローカルトランザクションを開始できません。 逆に、START TRANSACTION を使用してローカルトランザクションが開始された場合は、そのトランザクションがコミットまたはロールバックされるまで XA ステートメントを使用できません。
XA トランザクションが ACTIVE 状態の場合、暗黙的なコミットを引き起こすステートメントは発行できません。 その XA トランザクションをロールバックできないため、それを行うことは XA 規約に違反します。 このようなステートメントを実行しようとすると、次のエラーが発生します:
ERROR 1399 (XAE07): XAER_RMFAIL: The command cannot be executed
when global transaction is in the ACTIVE state
前の注意事項が適用されるステートメントは、セクション13.3.3「暗黙的なコミットを発生させるステートメント」に示されています。