Um XA-Transaktionen in MySQL durchzuführen, verwenden Sie die folgenden Anweisungen:
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
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
xidxid-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.
