MySQL 内で XA トランザクションを行うには、次のステートメントを利用してください。
XA {START|BEGIN}xid
[JOIN|RESUME] XA ENDxid
[SUSPEND [FOR MIGRATE]] XA PREPARExid
XA COMMITxid
[ONE PHASE] XA ROLLBACKxid
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
値によって利用されるフォーマットを識別する数値です。構文によって指示されているように、bqual
と formatID
は任意です。デフォルトの
bqual
値は、指示されていないかぎり
''
です。デフォルトの
formatID
値は、指示されていないかぎり 1 です。
gtrid
と
bqual
は文字列直定数である必要があり、それぞれが最長
64 バイトです
(文字数ではない)。gtrid
と
bqual
の指定方法は、いくつかあります。引用された文字列
('ab'
)、16 進数列
(0x6162
、X'ab'
)、またはビット値
(b'
)
を利用することができます。
nnnn
'
formatID
は符号なしの整数です。
gtrid
と
bqual
値は、MySQL
サーバーに内在する XA
サポートルーチンによって、バイトで解釈されます。しかし、XA
ステートメントを含む SQL
ステートメントが解析されると、サーバーはいくつかの特定のキャラクタセットと共に機能します。安全のために、gtrid
と bqual
を 16
進数列として書いてください。
xid
値は一般的にトランザクションマネージャーによって生成されます。ある
TM によって生成された値は、別の TM
によって生成された値とは異なります。規定の
TM は
XA
RECOVER
ステートメントによって返された値のリスト内にある、それ自身の
xid
値を識別できなければいけません。
XASTART
は、規定の
xid
xid
値を利用して XA
トランザクションをスタートします。各 XA
トランザクションは固有の
xid
値を持つ必要があるので、その値は同時に XA
トランザクションによって利用されてはいけません。一意性は
gtrid
と
bqual
値を利用して評価されます。XA
トランザクションに続くすべての XA
ステートメントは、XA
START
ステートメント内で規定されているように、同じ
xid
値を利用して指定されなければいけません。もし、それらのステートメントのどれかを利用しながら、既存
XA トランザクションに対応しない
xid
値を指定すると、エラーが起こります。
ひとつ、または複数の XA
トランザクションは同じグローバルトランザクションの一部になることができます。規定のグローバルトランザクション内のすべての
XA
トランザクションは、xid
値内で同じ gtrid
値を利用しなければいけません。この理由により、規定の
XA
トランザクションがどのグローバルトランザクションの一部であるかをはっきりさせるために、gtrid
値はグローバルに一意である必要があります。xid
値の bqual
部は、グローバルトランザクションの中で、各
XA
トランザクションに対して異なっている必要があります。bqual
値が異なっている必要があるという要求は、現在の
MySQL XA
インプリメンテーションの制限です。これは
XA 仕様の一部ではありません)。
XA
RECOVER
ステートメントは、PREPARED
状態にある MySQL サーバー上の XA
トランザクションに情報を返します。詳細は、項8.4.7.2. 「XA トランザクションの状態」
を参照してください。出力は、どのクライアントがスタートしたかに関わらず、サーバー上の
XA トランザクションなどの行を含みます。
XA
RECOVER
出力行はこのような形になります。'abc'
、'def'
、そして
7
部分で成り立っている xid
値の例):
mysql> XA RECOVER;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+--------+
| 7 | 3 | 3 | abcdef |
+----------+--------------+--------------+--------+
出力カラムは次の意味を持っています。
formatID
はトランザクション xid
の formatID
部です。
gtrid_length
は
xid
の
gtrid
部の、バイトでの長さです。
bqual_length
は
xid
の
bqual
部の、バイトでの長さです。
data
は
xid
の
gtrid
と
bqual
部の連結です。