현상 : 172903.SKEBS!si_sr03.259998: gtrid x0 x3c3b00c2 x1b58a9: LIBTUX_CAT:481:ERROR: Service xa_start returned -9
061741.firesv2!tf_avl_nx3.24795: gtrid x0 x3c8653da x847: LIBTUX_CAT:1384: ERROR: xa_start flags 0 returned -9
원인 : 1.tpcommit or tpabort를 하지 않고 다시 tpbegin을 했을 경우
Local Transaction mode에서 Global Transaction을 수행하고자 할 때 발생한다.
2.DB User 변경 후 xaview.sql를 실행하지 않았을 경우
3.Grant를 주지 않았을 경우
4.Oracle 8.x 부터 XA Connection 내에서 Local transaction이 가능하도록 허용하면서 나타나는 현상
Timeout과 같은 상황에 의해 XA Session이 종료될 수 있다. 이때에 예외처리를 정상적으로 하지 않은 상태에서
SQL을 사용하면, 이미 XA Session이 종료된 상태에서 xa_start()를 호출하지 않고 DB를 사용하려고 한 상태이기
때문에 이 Transaction은 Local transaction으로 간주하게 된다.
이 Local transaction은 반드시 EXEC SQL COMMIT/ROLLBACK을 호출하여 종료하여야 하지만, XA 프로그램
에서는 이러한 것을 사용하지 않기 때문에 이 Local transaction은 종료되지 않고 남아 있게 된다. 이러한 상태에서
Transactional service 호출에 의해 xa_start()가 호출되면 XAER_OUTSIDE 에러를 만나게 되는 것이다.
이러한 에러가 발생하면 이 Local transaction을 종료하지 않는 이상 계속해서 동일한 에러를 만나게 된다. 서버
프로세스를 종료하고 다시 부팅해야만 한다.
조치 : 1.서비스 호출 뒤 정상적으로 처리된 경우 tpcommit, 비정상적으로 처리된 경우는 tpabort를 추가한다.
2.변경된 DB User에 대한 xaview.sql를 실행하여 XA View table를 생성한다.
3.tuxedo admin user에 대한 권한을 설정한다.
4.이 문제는 Oracle 7.x에서는 발생하지 않던 문제이다. Oracle 8.x 부터 Global Tx와 Local Tx가 한 프로세스에서
가능하게 하면서 발생하는 문제이다.
이 문제를 해결하려면 모든 SQL에서 에러 상태를 정확하게 ?改臼?적절한 처리를 하여야 한다. OPENINFO에서
NoLocal=true를 설정하는 것도 일부 도움이 된다.
'▶ Tuxedo > 오류 메시지(Tuxedo)' 카테고리의 다른 글
LIBTUX_CAT:271: ERROR: System lock semop failure, key = 74400 (errno = (0) | 2010.07.07 |
---|---|
LIBTUX_CAT:481:ERROR: Service xa_start returned -6 (0) | 2010.07.07 |
CMDTUX_CAT:443: ERROR: tms_timeout group TCMSGRP1 xa_abort returned XA (0) | 2010.07.07 |
GP_CAT:1067, LIBTUX_CAT:741, WSNAT_CAT:1042 (0) | 2010.07.07 |
CMDTUX_CAT:1380: ERROR: Message queue blocking prevented delivery, Qad (0) | 2010.07.07 |