Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


13.3.7.1 XA トランザクションの SQL 構文

MySQL で XA トランザクションを実行するには、次のステートメントを使用します。

XA {START|BEGIN} xid [JOIN|RESUME]

XA END xid [SUSPEND [FOR MIGRATE]]

XA PREPARE xid

XA COMMIT xid [ONE PHASE]

XA ROLLBACK xid

XA RECOVER

XA START では、JOIN および RESUME 句はサポートされていません。

XA END では、SUSPEND [FOR MIGRATE] 句はサポートされていません。

各 XA ステートメントは XA キーワードで始まり、そのほとんどに xid 値が必要です。xid は XA トランザクション識別子です。これは、このステートメントがどのトランザクションに適用されるかを示します。xid 値はクライアントによって指定されるか、または MySQL サーバーによって生成されます。xid 値には、1 つから 3 つの部分が含まれています。

xid: gtrid [, bqual [, formatID ]]

gtrid はグローバルトランザクション識別子であり、bqual はブランチ修飾子であり、formatID は、gtrid および bqual 値で使用される形式を識別する数値です。構文で示されているように、bqualformatID はオプションです。bqual が指定されていない場合、そのデフォルト値は '' です。formatID が指定されていない場合、そのデフォルト値は 1 です。

gtridbqual はそれぞれ、最大 64 バイト長 (64 文字ではありません) の文字列リテラルである必要があります。gtridbqual は、いくつかの方法で指定できます。引用符で囲まれた文字列 ('ab')、16 進文字列 (0x6162X'ab')、またはビット値 (b'nnnn') を使用できます。

formatID は符号なし整数です。

gtrid および bqual 値は、MySQL サーバーのベースとなる XA サポートルーチンによってバイト単位で解釈されます。ただし、XA ステートメントを含む SQL ステートメントが解析されている間、サーバーは何からの特定の文字セットで動作します。安全のために、gtridbqual は 16 進文字列として記述してください。

xid 値は通常、トランザクションマネージャーによって生成されます。ある TM によって生成される値は、ほかの TM によって生成される値とは異なっている必要があります。特定の TM は、XA RECOVER ステートメントによって返された値のリスト内の自身の xid 値を認識できる必要があります。

XA START xid は、指定された xid 値を使用して XA トランザクションを開始します。各 XA トランザクションが一意の xid 値を持っている必要があるため、その値が現在、別の XA トランザクションによって使用されていてはいけません。一意性は、gtrid および bqual 値を使用して評価されます。XA トランザクションに対する以降のすべての XA ステートメントを、XA START ステートメントで指定されたものと同じ xid 値を使用して指定する必要があります。これらのステートメントのいずれかを使用しているが、既存の XA トランザクションに対応していない xid 値を指定した場合は、エラーが発生します。

1 つ以上の XA トランザクションを同じグローバルトランザクションの一部にすることができます。特定のグローバルトランザクション内のすべての XA トランザクションが xid 値内の同じ gtrid 値を使用する必要があります。このため、特定の XA トランザクションがどのグローバルトランザクションの一部であるかについてのあいまいさがないように、gtrid 値はグローバルに一意である必要があります。xid 値の bqual 部分は、グローバルトランザクション内の XA トランザクションごとに異なっている必要があります。(bqual 値が異なっているという要件は、現在の MySQL XA 実装の制限です。これは XA 仕様の一部ではありません。)

XA RECOVER ステートメントは、PREPARED 状態にある MySQL サーバー上の XA トランザクションに関する情報を返します。(セクション13.3.7.2「XA トランザクションの状態」を参照してください。) この出力には、どのクライアントによって開始されたかには関係なく、サーバー上のこのような XA トランザクションごとの行が含まれています。

XA RECOVER の出力行は次のようになります ('abc''def'7 の各部分から成る xid 値の例の場合)。

mysql> XA RECOVER;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data   |
+----------+--------------+--------------+--------+
|        7 |            3 |            3 | abcdef |
+----------+--------------+--------------+--------+

出力カラムには次の意味があります。

  • formatID は、トランザクション xidformatID 部分です。

  • gtrid_length は、xidgtrid 部分の長さ (バイト単位) です。

  • bqual_length は、xidbqual 部分の長さ (バイト単位) です。

  • data は、xidgtrid および bqual 部分の連結です。


User Comments
  Posted by Oren Hurvitz on November 23, 2009
If you have a failed XA Transaction, it will show as "ACTIVE (PREPARED)" with process no 0 and thread id 0:

mysql> show engine innodb status\G
....
---TRANSACTION 0 1192549934, ACTIVE (PREPARED) 791 sec, process no 0, OS thread id 0
1 lock struct(s), heap size 368, undo log entries 3

To rollback the transaction, first get its xid:

mysql> xa recover;
+----------+--------------+--------------+------------------------------------------------------------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+------------------------------------------------------------+
| 131075 | 30 | 28 | 1-a00640d:c09d:4ac454ef:b284c0a00640d:c09d:4ac454ef:b284c2 |
+----------+--------------+--------------+------------------------------------------------------------+
1 row in set (2.13 sec)

The xid is present in this output, but you have to perform a little string manipulation to get it. The format of a xid is: gtrid,bqual,formatID. The column 'data' contains a concatenation of 'gtrid' and 'bqual'. The columns 'gtrid_length' and 'bqual_length' specify how many bytes each of these values uses; use them to split apart 'data'. In this example, the result is:

mysql> xa rollback '1-a00640d:c09d:4ac454ef:b284c0','a00640d:c09d:4ac454ef:b284c2',131075;

ERROR 1402 (XA100): XA_RBROLLBACK: Transaction branch was rolled back
Sign Up Login You must be logged in to post a comment.