본문 바로가기

WAS/WebLogic

[weblogic] weblogic IP 변경 작업 중에 발생한 Weblogic.transaction.RollbackException: SubCoordinator ... Not Available

728x90

WebLogic IP 변경 시나리오는 다음과 같았다.

1) ${DOMAIN_HOME}/bin/setDomainEnv.sh 의 IP Address 변경

2) ${DOMAIN_HOME}/ bin/startWebLogic.sh,

    ${DOMAIN_HOME}/bin/stopManagedWebLogic.sh,

    ${DOMAIN_HOME}/ stopWebLogic.sh and shutdown.py의 IP 변경

 

※ 참고로 문서상에는 ${DOMAIN_HOME}/init-info/startscript.xml 파일의 IP도 바꾸라 하지만, 안 해도 됐다.

 

그러다가, WebLogic의 IP 뿐만 아니라 데이터소스에 설정된 DB의 주소또한 변경된다고 하여

${DOMAIN_HOME}/bin/jdbc/${DataSource_NAME}.xml 상에 있는 IP를 직접적으로 수정을 진행했다.

대상 인스턴스에 대해 shutdown을 하고 작업을 진행하였고, 작업을 마쳤기에 다시금 startup을 진행했다.

그러고 나서부터 아래의 로그가 출력이 되었다.

<Error> <EJB> <BEA-010026> 
<Exception occurred during commit of 
transaction Name=[EJB com.bea.~~~~~~(javax.jms.Message)],
Xid=BEA-~~~~~~(~~~~~),Status=Rolled back., CoordinatorURL=~~~~~~~):
weblogic.transaction.RollbackException: SubCoordinator '~~~~~~~~~~~~~~' not available

 

 

이 로그가 출력되면서 HANG 상태에 빠져서,

WebLogic 인스턴스 조차 RUNNING 상태에 들어오지 않는 상황이었다.

또한 분명히 JDBC 파일에서 DB의 IP를 변경했지만,

netstat 으로 확인했을 때, AS-IS 장비 쪽의 DB에 EST로 확인되었다.

 

뭔가 이상하다 싶어 구글링을 진행하였고 답을 얻을 수 있었다.

 

이 현상은 IP 변경작업을 진행한 경우에 나타날 수 있다고 한다.

트랜잭션 데이터는 WebLogic의 트랜잭션 로그(Transaction Log, TLOG)에 저장이 되며,

경로는  ${DOMAIN_HOME}/servers/${instance}/data이다.

 

DB 쪽의 IP를 변경한 뒤에는 해당 정보를

위의 경로에 저장을 하여 WebLogic이 받아들여야 하는데,

예전 트랜잭션 데이터가 WebLogic의 TLOG에 계속해서 남아 있어

WebLogic이 기존의 정보만을 캐치하는 경우에 발생할 수 있다.

 

조치 방법으로는 ${DOMAIN_HOME}/servers/${instance}/ 공간에서 security를 제외한

tmp, cache, data 디렉토리를 제거하고 재기동을 해야한다.