1.XA 서비스를 non-XA 모드로 호출할 때
1) OPENINFO에 NoLocal=true가 설정되어 있을 때
- 일단 tpbegin()을 호출하지 않았기 때문에 Transaction Context가 아니라서 xa_start()는 호출되지 않는다.
- 그런데, NoLocal=true가 설정되어 있으면 SQL 수행시 ORA-00155: cannot perform work outside of global transaction이 발생한다.
- 따라서 SQL error만 제대로 체크하는 루틴이 있으면 문제없다.
2) OPENINFO에 NoLocal=true가 설정되어 있지 않을 때
- 위와 마찬가지로 xa_start()는 호출되지 않는다.
- SQL은 Local transaction으로 수행된다.
- 위에서의 Local transaction에 대해서 COMMIT/ROLLBACK 명령이 없으므로
- 이 상태에서 XA 모드로 서비스를 호출하게 되면 LIBTUX_CAT:481: ERROR: Service xa_start returned -9 발생
- 이 경우에는 서버를 Rebooting하여야 한다.
2.non-XA 서비스를 XA 모드로 호출할 때
1) tpcall() 시에 에러가 발생하며, tperrno=14(TPETRAN)이다.
2) 이 경우에는 tpcall()의 flag에 TPNOTRAN을 설정하거나 tpbegin()을 호출하지 않은 상태에서 tpcall()을 수행하여야 한다.
3.xa_start() returned -9
1) 위의 경우에서도 보인 바와 같이 Transaction이 Local transaction으로 진입한 이후에
2) 정상적인 COMMIT/ROLLBACK 명령을 수행하지 않고
3) XA 모드로 다시 서비스를 호출하면 발생한다.
4) 서버를 Rebooting하여야 한다.
5) 위의 경우처럼 XA 서비스를 non-XA 모드로 호출하였다가 XA 모드로 호출하는 경우라든가
6) Timeout 등에 의해 xa Session이 끊어진 이후에 에러 처리를 제대로 하지 않아서
7) Local Transaction으로 진입한 경우가 있다.