주식회사 누리아이티

정보자산의 보안강화를 위한 2차인증 보안SW 및 지문인식 OTP/출입/보안카드 전문기업

▶ Tuxedo/이슈

XA 서비스를 non-XA 모드로 호출할 때, etc.

누리아이티 2010. 5. 2. 18:05

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으로 진입한 경우가 있다.