Spec-Zone .ru
спецификации, руководства, описания, API
|
Транзакция XA прогрессирует через следующие состояния:
Использовать XA
START
запустить транзакцию XA и вставить это ACTIVE
состояние.
Для ACTIVE
Транзакция XA, проблема SQL-операторы,
которые составляют транзакцию, и затем выходят XA END
оператор. XA END
вставляет транзакцию IDLE
состояние.
Для 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
потому что транзакция завершается.
Для 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, "Операторы Который Причина Неявная Фиксация".