본문 바로가기
IT/ORACLE

ORA-02049 시간초과 분산 트랜잭션이 잠금으로 대기중입니다 해결방법

by 베베야 2021. 4. 2.
728x90

오늘은 오라클 오류 메시지 "ORA-02049 시간초과 분산 트랜잭션이 잠금으로 대기 중입니다."의

발생 원인과 해결 방법에 대해서 알아보도록 하겠습니다.

 

ORA-02049 발생 원인

Orange에서 Update문를 실행한 다음 COMMIT이나 ROLLBACK을 실행하지 않은 상태에서 Java 프로젝트에서 같은 테이블로의 Update를 실행하는 경우 발생하는 메시지입니다.

 

이 오류는 시간이 지나면서 rollback segment의 수치가 낮아지면 자동으로 테이블 락이 해제되기도 합니다만 빠른 해결을 위한다면 다음의 내용을 진행하시기 바랍니다.

 

 

ORA-02049 문제 해결

트랜잭션 잠금 쿼리 조회

다음의 쿼리를 실행해서 트랜잭션 잠금 세션을 확인합니다. 특정 테이블에 대한 잠금 세션을 확인하기 위해서는 테이블 명을 OBJECT_NAME에 넣어 주시면 되겠습니다.

SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME

FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C

WHERE A.SID=B.SID

AND B.ID1=C.OBJECT_ID

AND B.TYPE='TM'

--AND C.OBJECT_NAME IN ('테이블명') --테이블명

 

트랜잭션 잠금 쿼리 조회 결과

잠금이 된 트랜잭션이 보입니다. 여기에서 SIDSERIAL# 값을 확인합니다.

트랜잭션 잠금 결과화면

 

 

트랜잭션 잠금 해제

위에서 찾은 SID와 SERIAL# 2가지 값을 가지고 다음의 쿼리를 실행해서 SESSIONKILL 하여 테이블 락(LOCK)을 해제합니다.

--세션 킬 문법

alter system kill session 'SID, SERIAL#'

 

--세션 킬 예제

alter system kill session '266,46344'

 

세션을 kill 하지 않고도 Orange에서의 쿼리를 COMMIT 또는ROLLBACK을 시킨 후 Java 프로젝트의 코드 실행하면 된다.(오렌지 쿼리 히스토리 확인 단축키 : F8)

반응형
그리드형

댓글