[WebLogic] XAConnection java.sql.SQLException: XA error: XAResource.XAER_RMFAIL start() failed
1. Overview
2019년 02월 고객사 일부 장애 건 정리.
2. 현상
웹로직 서버로그에는 나오지 않으나… 어플리케이션 노헙 로그에서는 아래와 같은게 발견된 적이 있다.
1
XAConnection java.sql.SQLException: XA error: XAResource.XAER_RMFAIL start() failed on resource
3. 해결
오라클 문서에서 가이드 하는 내용은.
- DB 쪽에 maximum process 확인.
- DB init.ora의 DISTRIBUTED_LOCKOUT 값 확인.
이중 LOCKOUT은 기본값 60초이며, DB를 insert,delete,update 등으로 사용자가 점유하고 있으면, table lock을 걸어두고 사용해야 한다.
이 lock을 기다리는 최대 시간을 의미하는 것으로 보여진다.
웹로직 에서 DB까지의 흐름을 보면
graph LR;
WebLogic --> JTA[JTA Timeout];
JTA --> XA[XA Timeout];
XA --> DB[DB Lockout Timeout];
JTA timeout : 웹로직에서 트랜잭션 전체 크기에 해당하는 time만큼 지정해야 한다. 클라이언트가 결과를 받을 때까지를 의미하기 때문에, DB단까지 포함해야 한다.
XA timeout : XA 로직 실행 타임아웃.
LOCKOUT : DB Table lock 대기 시간.
나도 헷갈려서 정리를 나중에 다시 해야겠는데..
어쨋든.. LOCKOUT이 실제 업무 타임보다 짧아, 기본값 60초만 기다리고 업무를 보지 못하고 rollback 되는 경우가 있다는 것 같다;;