현상
slog에 ERROR_XA_PROTO(-25001)가 발생하며 서비스가 지연됩니다.
[I] Session is associated with some xa branch. XA request other than XA_END cannot be accepted. type=xa_start
[I] THROW. ec=ERROR_XA_PROTO(-25001) [ XA protocol error. ] (csr_id:4294967295) [tbsvr_msg_xa.c:146:tbsvr_msg_xa_common]
SQL
복사
원인
해당 세션에서 이미 처리하고 있는 분산 트랜잭션이 있으나, 다시 분산 트랙잭션을 시작하려는 요청이 오는 경우 이러한 현상이 발생합니다.
해결
DBA의 판단 하에 dba_2pc_pending을 조회해 수동으로 처리합니다.
이는, 분산 트랙잭션 프로토콜 상 in-doubt tx가 있을때 commit, rollback 여부를 DB가 자체적으로 판단할 수 없기 때문에 DBA의 판단이 필요합니다.
1. 대상 확인
DBA_2PC_PENDING 뷰는 현재 정체되고 있는 XA 트랜잭션 브랜치(XA Transaction Branch)의 정보를 보여주는 뷰입니다.
SQL> SELECT LOCAL_TRAN_ID, XID, STATUS FROM DBA_2PC_PENDING;
LOCAL_TRAN_ID
-------------------------------------
XID
-------------------------------------
STATUS
---------------
2.16.18
1.1000.1000
PREPARED
1 selected.
SQL
복사
2. Commit, Rollback 처리
원하는 XA 트랜잭션 브랜치에 커밋 명령을 실행할 수 있습니다. 이 때 해당 XA 트랜잭션 브랜치에서 점유하고 있던 리소스는 반환되고 해당 트랜잭션은 커밋됩니다.
•
LOCAL_TRAN_ID = 트랜잭션 ID
SQL> SELECT LOCAL_TRAN_ID, XID, STATUS FROM DBA_2PC_PENDING;
LOCAL_TRAN_ID
-------------------------------------
XID
-------------------------------------
STATUS
---------------
2.16.18
1.1000.1000
PREPARED
1 selected.
SQL
복사
참고
DBA_2PC_PENDING 뷰: 현재 정체되고 있는 XA 트랜잭션 브랜치(XA Transaction Branch)의 정보를 보여주는 뷰 입니다.