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 ('테이블명') --테이블명
트랜잭션 잠금 쿼리 조회 결과
잠금이 된 트랜잭션이 보입니다. 여기에서 SID와 SERIAL# 값을 확인합니다.
트랜잭션 잠금 해제
위에서 찾은 SID와 SERIAL# 2가지 값을 가지고 다음의 쿼리를 실행해서 SESSION을 KILL 하여 테이블 락(LOCK)을 해제합니다.
--세션 킬 문법
alter system kill session 'SID, SERIAL#'
--세션 킬 예제
alter system kill session '266,46344'
세션을 kill 하지 않고도 Orange에서의 쿼리를 COMMIT 또는ROLLBACK을 시킨 후 Java 프로젝트의 코드 실행하면 된다.(오렌지 쿼리 히스토리 확인 단축키 : F8)
반응형
그리드형
'IT > ORACLE' 카테고리의 다른 글
[ORACLE] DECODE 함수 사용법 (0) | 2021.05.07 |
---|---|
오라클(ORACLE) 시간 포맷(1/24/60) (0) | 2021.04.23 |
오라클 쿼리 세션 타임아웃 설정 (0) | 2021.04.02 |
ORA-10631 shrink clause should not be specified for this object (0) | 2021.03.30 |
오라클 함수 기반 인덱스 생성 & 조회 (0) | 2021.03.30 |
댓글