Spec-Zone .ru
спецификации, руководства, описания, API

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. Для a 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 и локальные транзакции (non-XA) являются взаимоисключающими. Например, если XA START был выпущен, чтобы начать транзакцию XA, локальная транзакция не может быть запущена, пока транзакция XA не фиксировалась или откатывалась. Наоборот, если локальная транзакция была запущена с START TRANSACTION, никакие операторы XA не могут использоваться, пока транзакция не фиксировалась или откатывалась.

Отметьте это, если транзакция XA находится в ACTIVE состояние, невозможно сделать заявления, которые вызывают неявную фиксацию. Это нарушило бы контракт XA, потому что Вы не могли откатывать транзакцию XA. Вы получите следующую ошибку, если Вы попытаетесь выполнить такой оператор:

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

Операторы, к которым применяется предыдущий комментарий, перечисляются в Разделе 13.3.3, "Операторы Который Причина Неявная Фиксация".