MySQL : XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state 에러가 날때
Java 2011. 8. 8. 15:10
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
하나의 트랜젝션 안에서 실행되는 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
요런게 있었다.
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