1. 어떤 경우에 DB Lock이 걸릴까?
(1) 프로시저를 컴파일 할 때 문법에러도 아닌데 컴파일이 안되는 경우
- 잘못된 DB 링크를 참조하고 있거나, 프로시저 내에서 수행되는 테이블에 DB Lock이 걸리면 정상 컴파일이 되지 않고 무한 대기상태로 돌입
(2) 프로시저를 참조하는 배치가 끝나지 않고 Running 상태인 경우
2. Lock 발생 테이블 조회 쿼리
--1. lock 발생 사용자와 SQL, OBJECT 조회
SELECT DISTINCT X.SEESION_ID, A.SERIAL#, D.OBJECT_NAME, A.MACHINE, A.TERMINAL, A.PROGRAM, B.ADDRESS, B.PIECE, B.SQL_TEXT
FROM V$LOCKED_OBJECT X, V$SESSION A, V$SQLTEXT B, DBA_OBJECTS D
WHERE X.SESSION_ID = A.SID
AND X.OBJECT_ID = D.OBJECT_ID
AND A.SQL_ADDRESS = B.ADDRESS
ORDER BY B.ADDRESS, B.PIECE;
--2. 해당 테이블에 LOCK 걸렸는지 확인
SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME, SQL_EXEC_START
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' --TX: 롤백 세그먼트 및 슬롯번호, TM: 테이블/오브젝트ID
AND C.OBJECT_NAME IN ('MBR_ISSU_CPN') --테이블명
-- TX - row lock connection 확인(오라클 세션모니터 기준)
3. Lock 발생 시 어떻게 처리해야 하는가?
(1) Lock 발생 SID 확인 후 해당 Row에서 Kill Session 진행
(2) ALTER SYSTEM KILL SESSION '275,1'; 명령어를 입력 해 Session_id를 Kill
'회사 개발 정리' 카테고리의 다른 글
[오라클 Oracle] 테이블 스페이스 용량 확인 (0) | 2023.03.15 |
---|---|
[오라클 Oracle] 스케쥴러 Job 생성하기 (0) | 2023.03.10 |
[오라클 Oracle] 특정시간 대 CPU 과점유 확인을 위한 SQL 수행횟수 확인 (0) | 2023.03.10 |
[오라클 Oracle] 플래시백(FlashBack) (0) | 2023.03.10 |