MySQL 8.0 リファレンスマニュアル


13.3.8.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 [CONVERT XID]

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 進文字列 (X'6162'0x6162) またはビット値 (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.8.2「XA トランザクションの状態」を参照してください。) この出力には、どのクライアントによって開始されたかには関係なく、サーバー上のこのような XA トランザクションごとの行が含まれています。

XA RECOVER には、XA_RECOVER_ADMIN 権限が必要です。 この権限要件により、ユーザーは自分以外の未処理の準備済 XA トランザクションの XID 値を検出できなくなります。 XA トランザクションを開始したユーザーが XID を認識しているため、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 部分の連結です。

XID 値に印刷不可能な文字が含まれる場合があります。 XA RECOVER では、クライアントが XID 値を 16 進数でリクエストできるように、オプションの CONVERT XID 句を使用できます。


関連キーワード:  ステートメント, XA, トランザクション, CREATE, xid, TABLE, DROP, bqual, gtrid, サブクエリー