Um XA-Transaktionen in MySQL durchzuführen, verwenden Sie die folgenden Anweisungen:
XA {START|BEGIN}xid
[JOIN|RESUME] XA ENDxid
[SUSPEND [FOR MIGRATE]] XA PREPARExid
XA COMMITxid
[ONE PHASE] XA ROLLBACKxid
XA RECOVER
Bei XA START
werden die Klauseln
JOIN
und RESUME
nicht
unterstützt.
Bei XA END
wird die Klausel
SUSPEND [FOR MIGRATE]
nicht unterstützt.
Jede XA-Anweisung beginnt mit dem Schlüsselwort
XA
. Die meisten dieser Anweisungen
erfordern einen xid
-Wert.
xid
ist ein
XA-Transaktionsbezeichner. Er gibt an, für welche Transaktion
die Anweisung gilt. xid
-Werte
werden vom Client übergeben oder auf dem MySQL Server
erzeugt. Ein xid
-Wert besteht aus
einem bis drei Teilen:
xid
:gtrid
[,bqual
[,formatID
]]
gtrid
ist ein globaler
Transaktionsbezeichner, bqual
ein
Verzweigungsbezeichner und formatID
eine Zahl, die das Format angibt, welches von den
gtrid
- und
bqual
-Werten verwendet wird. Wie
aus der Syntax hervorgeht, sind
bqual
und
formatID
optional. Der Standardwert
von bqual
ist
''
, sofern nichts anderes angegeben ist.
Der Standardwert von formatID
ist
1, sofern nichts anderes angegeben ist.
gtrid
und
bqual
müssen String-Literale sein,
die jeweils bis zu 64 Byte (nicht Zeichen) lang sein dürfen.
gtrid
und
bqual
können auf unterschiedliche
Art und Weise angegeben werden. Sie können einen String in
Anführungszeichen ('ab'
), einen
Hexadezimal-String (0x6162
,
X'ab'
) oder einen Bitwert
(b'
)
angeben.
nnnn
'
formatID
ist ein vorzeichenloser
Integer.
Die gtrid
- und
bqual
-Werte werden von den
XA-Supportroutinen auf dem MySQL Server als Bytewerte
interpretiert. Allerdings benutzt der Server bei der Analyse
einer SQL-Anweisung, die eine XA-Anweisung enthält, einen
speziellen Zeichensatz. Wenn Sie sichergehen wollen, notieren
Sie gtrid
und
bqual
als Hexadezimal-String.
xid
-Werte werden normalerweise vom
TM erzeugt. Die Werte, die von einem TM erzeugt werden,
müssen sich von denen unterscheiden, die von anderen TMs
gebildet werden. Ein gegebener TM muss seine eigenen
xid
-Werte in einer Werteliste, die
von der Anweisung XA RECOVER
zurückgegeben
wird, erkennen können.
XA START
startet eine XA-Transaktion mit dem gegebenen
xid
xid
-Wert. Jede XA-Transaktion
benötigt einen eindeutigen
xid
-Wert, d. h., der Wert darf
nicht gleichzeitig von einer anderen XA-Transaktion verwendet
werden. Diese Eindeutigkeit wird mithilfe der Werte
gtrid
und
bqual
erzielt. Alle nachfolgenden
XA-Anweisungen für die XA-Transaktion müssen unter
Verwendung desselben xid
-Werts
angegeben werden, der in der XA
START
-Anweisung übergeben wurde. Verwenden Sie eine
dieser Anweisungen und geben dabei keinen
xid
-Wert an, der einer laufenden
XA-Transaktion entspricht, dann tritt ein Fehler auf.
Eine oder mehrere XA-Transaktionen können Teil derselben
globalen Transaktion sein. Alle XA-Transaktionen in einer
gegebenen globalen Transaktion müssen denselben
gtrid
-Wert im
xid
-Wert benutzen. Aus diesem Grund
müssen gtrid
-Werte global
eindeutig sein, damit keine Mehrdeutigkeiten darüber
aufkommen können, zu welcher globalen Transaktion eine
gegebene XA-Transaktion gehört. Der Teil
bqual
des
xid
-Werts muss sich für jede
XA-Transaktion innerhalb einer globalen Transaktion
unterscheiden. (Die Anforderung, dass
bqual
-Werte unterschiedlich sein
müssen, stellt eine Einschränkung der aktuellen
XA-Implementierung in MySQL dar. Sie ist nicht Teil der
XA-Spezifikation.)
Die Anweisung XA RECOVER
gibt Informationen
zu denjenigen XA-Transaktionen auf dem MySQL Server zurück,
die den Status PREPARED
haben. (Siehe auch
Abschnitt 13.4.7.2, „XA-Transaktionszustände“.) Die Ausgabe enthält einen
Datensatz für jede derartige XA-Transaktion auf dem Server
– unabhängig davon, welcher Client sie gestartet hat.
Die Ausgabedatensätze von XA RECOVER
sehen
wie folgt aus (für einen
xid
-Beispielwert, der aus den
Teilen 'abc'
, 'def'
und
7
besteht):
mysql> XA RECOVER;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+--------+
| 7 | 3 | 3 | abcdef |
+----------+--------------+--------------+--------+
Die Ausgabespalten haben die nachfolgend beschriebenen Bedeutungen:
formatID
ist der
formatID
-Teil der Transaktion
xid
.
gtrid_length
ist die Länge des
gtrid
-Teils der Transaktion
xid
in Byte.
bqual_length
ist die Länge des
bqual
-Teils der Transaktion
xid
in Byte.
data
ist die Verkettung der Teile
gtrid
und
bqual
der Transaktion
xid
.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.