13.3.7.1 XA 트랜잭션 SQL 구문
MySQL에서 XA 트랜잭션을 실행하려면 다음 문을 사용합니다.
XA {START|BEGIN} xid [JOIN|RESUME]
XA END xid [SUSPEND [FOR MIGRATE]]
XA PREPARE xid
XA COMMIT xid [ONE PHASE]
XA ROLLBACK xid
XA RECOVER XA START 는 JOIN 및 RESUME 절은 지원되지 않습니다.
XA END 는 SUSPEND [FOR MIGRATE] 어구는 지원되지 않습니다.
각 XA 문은 XA 키워드로 시작하며 그 대부분 xid 값이 필요합니다. xid 는 XA 트랜잭션 식별자입니다. 이것은이 문이 어떤 거래에 적용되는지를 보여줍니다. xid 값은 클라이언트가 제공되거나 MySQL 서버에서 생성됩니다. xid 값은 1 개에서 3 개 부분이 포함되어 있습니다.
xid : gtrid [, bqual [, formatID ]
gtrid 는 글로벌 트랜잭션 식별자이며, bqual 브런치 한정자이며, formatID 은 gtrid 및 bqual 값으로 사용되는 형식을 식별하는 숫자입니다. 구문에 표시된대로 bqual 과 formatID 는 옵션입니다. bqual 가 지정되지 않은 경우 기본값은 '' 입니다. formatID 가 지정되지 않은 경우 기본값은 1입니다.
gtrid 와 bqual 는 각각 최대 64 바이트 (64 자 아닙니다) 문자열 리터럴이어야합니다. gtrid 와 bqual 은 여러 가지 방법으로 지정할 수 있습니다. 따옴표로 둘러싸인 문자열 ( 'ab' ) 16 진수 문자열 ( 0x6162 , X'ab' ) 또는 비트 값 ( b' )를 사용할 수 있습니다. nnnn '
formatID 는 부호없는 정수입니다.
gtrid 및 bqual 값은 MySQL 서버의 기반이되는 XA 지원 루틴은 바이트 단위로 해석됩니다. 그러나 XA 문을 포함하는 SQL 문을 구문 분석하는 동안 서버는 무엇에서 특정 문자 세트로 작동합니다. 안전을 위해 gtrid 와 bqual 는 16 진수 문자열로 기술 해주십시오.
xid 값은 일반적으로 트랜잭션 관리자에 의해 생성됩니다. 있는 TM에 의해 생성 된 값은 다른 TM에 의해 생성 된 값과는 달라야합니다. 특정 TM은 XA RECOVER 문에 의해 반환 된 값의 목록에서 자신의 xid 값을 인식 할 수 있어야합니다.
XA START 는 지정된 xidxid 값을 사용하여 XA 트랜잭션을 시작합니다. 각 XA 트랜잭션이 고유의 xid 값을 가지고 있어야하므로 그 값이 현재 다른 XA 트랜잭션에 의해 사용되지는 안됩니다. 독창성은 gtrid 및 bqual 값을 사용하여 평가됩니다. XA 트랜잭션에 대한 이후의 모든 XA 문을 XA START 문에서 지정된 것과 같은 xid 값을 사용하여 지정해야합니다. 이러한 문 중 하나를 사용하고 있지만 기존의 XA 트랜잭션을 지원하지 않는 xid 값을 지정하면 오류가 발생합니다.
하나 이상의 XA 트랜잭션을 동일한 전역 트랜잭션의 일부가 될 수 있습니다. 특정 글로벌 트랜잭션의 모든 XA 트랜잭션이 xid 값에서 같은 gtrid 값을 사용해야합니다. 따라서 특정 XA 트랜잭션이 전역 트랜잭션의 일부인지에 대한 모호함이 없도록 gtrid 값은 전역 적으로 고유해야합니다. xid 값 bqual 부분은 글로벌 트랜잭션의 XA 트랜잭션마다 다르다해야합니다. ( bqual 값이 다르다는 요구 사항은 현재 MySQL XA 구현의 제한 사항입니다. 이것은 XA 사양의 일부가 아닙니다.)
XA RECOVER 문은 PREPARED 상태에있는 MySQL 서버에서 XA 트랜잭션에 대한 정보를 반환합니다. ( 섹션 13.3.7.2 "XA 트랜잭션의 상태" 를 참조하십시오.)이 출력에는 어떤 클라이언트에 의해 시작되었는지에 관계없이 서버에서 이러한 XA 트랜잭션 당 행이 포함되어 있습니다 .
XA RECOVER 의 출력 행은 다음과 같습니다 ( 'abc' , 'def' , 7 의 각 부분으로부터 완성되는 xid 값의 예를 들어).
mysql> XA RECOVER;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+--------+
| 7 | 3 | 3 | abcdef |
+----------+--------------+--------------+--------+
출력 열에는 다음과 같은 의미가 있습니다.
formatID트랜잭션xid의formatID부분입니다.gtrid_length는xid의gtrid부분의 길이 (바이트 단위)입니다.bqual_length는xid의bqual부분의 길이 (바이트 단위)입니다.data는xid의gtrid및bqual부분의 연결입니다.