15.3.8.2 Состояния транзакций XA
Транзакция XA проходит через следующие состояния:
Используйте
XA START, чтобы начать транзакцию XA и перевести её в состояниеACTIVE.Для транзакции XA
ACTIVEвыполните SQL-команды, составляющие транзакцию, а затем выполните командуXA END. КомандаXA ENDпереводит транзакцию в состояниеIDLE.-
Для транзакции XA
IDLEвы можете выполнить командуXA PREPAREили командуXA COMMIT ... ONE PHASE:XA PREPAREпереводит транзакцию в состояниеPREPARED. КомандаXA RECOVERв этот момент включает значениеxidв свой вывод, так какXA RECOVERперечисляет все транзакции XA, находящиеся в состоянииPREPARED.XA COMMIT ... ONE PHASEподготавливает и подтверждает транзакцию. Значениеxidне отображается командойXA RECOVER, поскольку транзакция завершается.
Для транзакции XA
PREPAREDвы можете выполнить командуXA COMMITдля подтверждения и завершения транзакции илиXA ROLLBACKдля отката и завершения транзакции.
Вот простая транзакция XA, которая вставляет строку в таблицу как часть глобальной транзакции:
mysql> XA START 'xatest';
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO mytable (i) VALUES(10);
Query OK, 1 row affected (0.04 sec)
mysql> XA END 'xatest';
Query OK, 0 rows affected (0.00 sec)
mysql> XA PREPARE 'xatest';
Query OK, 0 rows affected (0.00 sec)
mysql> XA COMMIT 'xatest';
Query OK, 0 rows affected (0.00 sec)
MySQL 8.4 поддерживает отсоединённые транзакции XA, включённые переменной системы xa_detach_on_prepare (по умолчанию ON). Отсоединённые транзакции отсоединяются от текущей сессии после выполнения XA
PREPARE (и могут быть подтверждены или отменены другим подключением). Это означает, что текущая сессия свободна начать новую локальную транзакцию или транзакцию XA без необходимости ожидания подтверждения или отката подготовленной транзакции XA.
Когда транзакции XA отсоединены, подключение не имеет специальной информации о любой подготовленной транзакции XA. Если текущая сессия пытается подтвердить или отменить данную транзакцию XA (даже ту, которую она подготовила) после того, как другое подключение уже сделало это, попытка отклоняется с ошибкой недействительного XID (), поскольку запрашиваемый xid больше не существует.
Отсоединённые транзакции XA не могут использовать временные таблицы.
Когда отсоединённые транзакции XA отключены (xa_detach_on_prepare установлено на OFF), транзакция XA остаётся подключённой до тех пор, пока она не будет подтверждена или отменена исходным подключением. Отключение отсоединённых транзакций XA не рекомендуется для экземпляра MySQL, используемого в группе репликации; см. Настройка экземпляра сервера для получения дополнительной информации.
Если транзакция XA находится в состоянии ACTIVE, вы не можете выполнить какие-либо команды, которые вызывают неявное подтверждение. Это нарушило бы контракт XA, так как вы не смогли бы откатить транзакцию XA. Попытка выполнить такую команду вызывает следующую ошибку:
ERROR 1399 (XAE07): XAER_RMFAIL: The command cannot be executed
when global transaction is in the ACTIVE state
Команды, к которым относится предыдущее замечание, перечислены в Разделе 15.3.3, «Команды, вызывающие неявное подтверждение».
© 2025 Oracle
Licensed under the GPLv2 License.