Spec-Zone.ru › MySQL 5.7

13.3.7.2 Состояния транзакций XA

Транзакция XA проходит через следующие состояния:

  1. Используйте XA START, чтобы начать XA-транзакцию и перевести её в состояние ACTIVE.

  2. Для ACTIVE XA-транзакции выполните SQL-команды, составляющие транзакцию, а затем выполните команду XA END. Команда XA END переводит транзакцию в состояние IDLE.

  3. Для IDLE XA-транзакции можно выполнить либо команду XA PREPARE, либо команду XA COMMIT ... ONE PHASE:

    • XA PREPARE переводит транзакцию в состояние PREPARED. Команда XA RECOVER в этот момент включает в свой вывод значение xid, потому что XA RECOVER перечисляет все XA-транзакции, находящиеся в состоянии PREPARED.

    • XA COMMIT ... ONE PHASE подготавливает и фиксирует транзакцию. Значение xid не перечисляется командой XA RECOVER, потому что транзакция завершается.

  4. Для PREPARED XA-транзакции можно выполнить команду 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)

В рамках подключения клиента XA-транзакции и локальные (не-XA) транзакции взаимоисключают друг друга. Например, если XA START была выполнена для начала XA-транзакции, локальную транзакцию нельзя начать, пока XA-транзакция не будет завершена или отменена. Аналогично, если локальная транзакция была начата с помощью START TRANSACTION, никакие XA-команды нельзя использовать, пока транзакция не будет завершена или отменена.

Если XA-транзакция находится в состоянии ACTIVE, нельзя выполнять команды, вызывающие неявное подтверждение. Это нарушило бы контракт XA, так как невозможно было бы отменить XA-транзакцию. Если вы попытаетесь выполнить такую команду, будет выведено следующее сообщение об ошибке:

ERROR 1399 (XAE07): XAER_RMFAIL: The command cannot be executed
when global transaction is in the ACTIVE state

Команды, на которые распространяется предыдущее замечание, перечислены в разделе 13.3.3, «Команды, вызывающие неявное подтверждение».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/xa-states.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API