13.3.7.1 XA транзакции SQL-операции
Для выполнения XA транзакций в MySQL используйте следующие операторы:
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 [CONVERT XID]
Для XA
START, JOIN и RESUME определения распознаются, но не имеют эффекта.
Для XA
END определение SUSPEND [FOR MIGRATE] распознается, но не имеет эффекта.
Каждый XA оператор начинается с ключевого слова XA, и большинство из них требуют значение xid. xid — это идентификатор XA транзакции. Он указывает, к какой транзакции относится оператор. Значения xid предоставляются клиентом или генерируются сервером MySQL. Значение xid состоит из одной до трех частей:
xid: gtrid [, bqual [, formatID ]]
gtrid — это глобальный идентификатор транзакции, bqual — квалификатор ветви, а formatID — число, определяющее формат, используемый для значений gtrid и bqual. Как показано в синтаксисе, bqual и formatID являются необязательными. Значение по умолчанию для bqual — '', если не указано другое. Значение по умолчанию для formatID — 1, если не указано другое.
gtrid и bqual должны быть строковыми литералами, каждый длиной до 64 байт (не символов). gtrid и bqual могут быть заданы несколькими способами. Вы можете использовать строку в кавычках ('ab'), шестнадцатеричную строку (X'6162', 0x6162) или битовое значение (b').nnnn'
formatID — целое без знака.
Значения gtrid и bqual интерпретируются в байтах внутренними процедурами поддержки XA сервера MySQL. Однако, в то время как SQL-запрос, содержащий XA оператор, разбирается, сервер работает с некоторым специфическим набором символов. Для безопасности записывайте gtrid и bqual в шестнадцатеричном формате.
Значения xid обычно генерируются менеджером транзакций. Значения, сгенерированные одним менеджером транзакций, должны отличаться от значений, сгенерированных другими менеджерами транзакций. Данный менеджер транзакций должен быть способен распознать свои собственные значения xid в списке значений, возвращаемых оператором XA
RECOVER.
XA START
начинает XA транзакцию с заданным значением xidxid. Каждая XA транзакция должна иметь уникальное значение xid, поэтому это значение не должно использоваться другой XA транзакцией. Уникальность определяется значениями gtrid и bqual. Все последующие XA операторы для XA транзакции должны быть указаны с тем же значением xid, что и в операторе XA
START. Если вы используете какие-либо из этих операторов, но указываете значение xid, которое не соответствует какой-либо существующей XA транзакции, произойдет ошибка.
Одна или несколько XA транзакций могут быть частью одной глобальной транзакции. Все XA транзакции в рамках данной глобальной транзакции должны использовать то же значение gtrid в значении xid. По этой причине значения gtrid должны быть глобально уникальными, чтобы не было неоднозначности относительно глобальной транзакции, к которой принадлежит данная XA транзакция. Часть bqual значения xid должна быть различной для каждой XA транзакции в рамках глобальной транзакции. (Требование о том, что значения bqual должны быть различными, является ограничением текущей реализации MySQL XA. Это не часть спецификации XA.)
Оператор XA
RECOVER возвращает информацию для тех XA транзакций на сервере MySQL, которые находятся в состоянии PREPARED. (См. Раздел 13.3.7.2, «Состояния XA транзакций».) Вывод включает строку для каждой такой XA транзакции на сервере, независимо от того, какой клиент её начал.
XA
RECOVER строки вывода выглядят так (для примера значения xid, состоящего из частей 'abc', 'def' и 7):
mysql> XA RECOVER;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+--------+
| 7 | 3 | 3 | abcdef |
+----------+--------------+--------------+--------+
Столбцы вывода имеют следующие значения:
formatID— частьformatIDтранзакцииxidgtrid_length— длина в байтах частиgtridxidbqual_length— длина в байтах частиbqualxiddata— конкатенация частейgtridиbqualзначенияxid
Значения XID могут содержать непропечатываемые символы. Начиная с MySQL 5.7.5, XA
RECOVER допускает необязательное определение CONVERT
XID, чтобы клиенты могли запросить значения XID в шестнадцатеричном формате.
© 2025 Oracle
Licensed under the GPLv2 License.