MySQL : XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state 에러가 날때

MySQL XA JDBC 드라이버를 사용할때

하나의 트랜젝션 안에서 실행되는 SQL 들 중에  ALTER TABLE, CREATE INDEX, DROP INDEX, DROP TABLE, RENAME TABLE 요런것들이 있을때 나는 에러이다.

뭐 이런 에러를 볼 경우가 거의 없겠지만

나 같은 경우는 MySQL 과 Oracle 을 같이 묶어서 트랜젝션 처리를 해야해서 XA 드라이버를 사용해야 했고

MySQL 쪽은 Stored Procedure 에서 디비쪽 관련작업을 다 했기 때문에 몇몇 SP 안에서  임시테이블을 사용해야 해서

CREATE TEMPORARY TABLE TMP1

DROP TABLE IF EXISTS TMP1

요런게 있었다.

CREATE TABLE 은 TEMPORARY 키워드를 붙여줘서 상관이 없었는데 DROP TABLE 은 별 생각을 안하고 TEMPORARY 키워드가 없었기 때문에 

XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state 요런 Exception 이 발생했다.



해결하기 위해서는  

DROP TABLE IF EXISTS TMP1  에  DROP TEMPORARY TABLE IF EXISTS TMP1 요렇게 TEMPORARY 키워드를 추가하면 된다.





참고링크:

http://dev.mysql.com/doc/refman/5.0/en/xa-states.html

http://dev.mysql.com/doc/refman/5.0/en/implicit-commit.html