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
値を識別できなければいけません。
XA START
は、規定の 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
トランザクションに情報を返します。(詳しくは
項12.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
部の連結です。