MySQL 5.1 リファレンスマニュアル :: 12 SQL ステートメント構文 :: 12.4 MySQL トランザクションとロッキング関連のステートメント :: 12.4.7 XA トランザクション :: 12.4.7.1 XA トランザクション SQL 構文
« 12.4.7 XA トランザクション

12.4.7.2 XA トランザクションの状態 »
Section Navigation      [Toggle]
  • 12.4.7 XA トランザクション
  • 12.4.7.1 XA トランザクション SQL 構文
  • 12.4.7.2 XA トランザクションの状態

12.4.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 値によって利用されるフォーマットを識別する数値です。構文によって指示されているように、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 部の連結です。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates