15.3.8.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 START, XA BEGIN, XA END, XA COMMIT и XA ROLLBACK операторы не отфильтровываются по умолчанию в базе данных, когда сервер работает с --replicate-do-db или --replicate-ignore-db.
Одна или несколько XA транзакций могут быть частью одной глобальной транзакции. Все XA транзакции в рамках данной глобальной транзакции должны использовать одинаковое значение gtrid в значении xid. По этой причине значения gtrid должны быть глобально уникальными, чтобы не было неоднозначности относительно того, к какой глобальной транзакции принадлежит данная XA транзакция. Часть bqual значения xid должна отличаться для каждой XA транзакции в рамках глобальной транзакции. (Требование о том, чтобы значения bqual были разными, является ограничением текущей реализации MySQL XA. Это не часть спецификации XA.)
Оператор XA
RECOVER возвращает информацию о тех XA транзакциях на сервере MySQL, которые находятся в состоянии PREPARED. (См. Раздел 15.3.8.2, «Состояния XA транзакций».) Вывод включает строку для каждой такой XA транзакции на сервере, независимо от того, какой клиент её запустил.
XA
RECOVER требует привилегии XA_RECOVER_ADMIN. Это требование по привилегиям предотвращает пользователям от обнаружения значений XID для ожидающих подготовленных XA транзакций, отличных от их собственных. Это не влияет на нормальную фиксацию или откат XA транзакции, поскольку пользователь, который её запустил, знает её XID.
Строки вывода оператора 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иbqualxid
Значения XID могут содержать непечатные символы. XA
RECOVER допускает необязательное CONVERT
XID определение, чтобы клиенты могли запрашивать значения XID в шестнадцатеричном формате.
© 2025 Oracle
Licensed under the GPLv2 License.