13.3.7.2 XA 트랜잭션의 상태
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
문은XA RECOVER
가PREPARED
상태에있는 모든 XA 트랜잭션을 나열하며 출력 트랜잭션의xid
값이 포함됩니다.XA COMMIT ... ONE PHASE
트랜잭션의 준비와 노력을합니다. 트랜잭션이 끝나기 때문에xid
값은XA RECOVER
에 의해 나열되지 않습니다.
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 트랜잭션을 시작하기 위해 XA START
가 발행 된 경우에는 그 XA 트랜잭션이 커밋 또는 롤백 될 때까지 로컬 트랜잭션을 시작할 수 없습니다. 반대로, START TRANSACTION
을 사용하여 로컬 트랜잭션이 시작되면 그 트랜잭션이 커밋 또는 롤백 될 때까지 XA 문을 사용할 수 없습니다.
XA 트랜잭션이 ACTIVE
상태에있는 경우에는 암시 적 커밋을 발생시키는 모든 문이 발행 할 수 없습니다. 그 XA 트랜잭션을 롤백 할 수 없기 때문에 그것을 할 수는 XA 약관에 위배됩니다. 이 같은 문을 실행하려고하면 다음 오류가 표시됩니다.
ERROR 1399 (XAE07) : XAER_RMFAIL : The command can not be executed when global transaction is in the ACTIVE state
전주의 사항이 적용되는 문은 섹션 13.3.3 "암시 적 커밋을 발생시키는 문" 에 나와 있습니다.