[Oracle] Lock 확인

이 게시물은 Oracle 잠금을 확인한 후 프로세스를 종료하는 방법에 대해 설명했습니다.

— 잠긴 테이블 확인
DO.OBJECT_NAME, DO.OWNER, DO.OBJECT_TYPE, DO.OWNER,
VO.XIDUSN, VO.SESSION_ID, VO.LOCKED_MODE
V$LOCKED_OBJECT VO에서 DBA_OBJECTS DO
WHERE VO.OBJECT_ID = DO.OBJECT_ID;


잠금이 없을 때의 화면

※테이블이 잠겨 있는지 여부.

A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME 선택
V$SESSION A, V$LOCK B, DBA_OBJECTS C에서
여기서 A.SID = B.SID 및 B.ID1 = C.OBJECT_ID
AND B.TYPE=’TM’ AND C.OBJECT_NAME IN(‘TB_CO_GENO’);

※ User, SQL, OBJECT 요청 발생 잠금

고유한 X.SESSION_ID, A.SERIAL#, D.OBJECT_NAME, A.MACHINE, A.TERMINAL을 선택합니다.


A.PROGRAM, B.ADDRESS, B.PIECE, B.SQL_TEXT
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 및 A.SQL_ADDRESS = B.ADDRESS
B. 주소, B. 조각으로 주문;

※ 현재 방문자의 SQL 분석

고유한 A.SID, A.SERIAL#,
A. 기계, A. 터미널, A. 프로그램,
B.ADDRESS, B.PIECE, B.SQL_TEXT
V$SESSION A, V$SQLTEXT B에서
WHERE A.SQL_ADDRESS = B.ADDRESS
A.SID, A.SERIAL NO., B.ADDRESS, B.PIECE로 주문

※ 잠금 세션 종료

A.SID, A.SERIAL# 선택
V$SESSION A, V$LOCK B에서,
DBA_OBJECTS C
여기서 A.SID = B.SID
AND B.ID1 = C.OBJECT_ID
AND B.TYPE = ‘TM’
AND C.OBJECT_NAME = ‘TB_CO_GENO’

SID 일련번호
— ——-
5 1
6 1

2. 다음 명령으로 SESSION을 종료합니다.

ALTER SYSTEM KILL SESSION ‘SESSION_ID, SERIAL#’;
SQL> 시스템 종료 세션 ‘5, 1’ 변경;
SQL> 시스템 종료 세션 ‘6, 1’ 변경;

※ Lock 세션을 종료하는 SQL 문
고유한 X.SESSION_ID, A.SERIAL#, D.OBJECT_NAME, A.MACHINE, A.TERMINAL을 선택합니다.


A.PROGRAM, A.LOGON_TIME, ‘ALTER SYSTEM KILL SESSION”’||A.SID||’, ‘||A.SERIAL#||”’;’
GV$LOCKED_OBJECT X, GV$SESSION A, DBA_OBJECTS D에서
WHERE X.SESSION_ID = A.SID 및 X.OBJECT_ID = D.OBJECT_ID
LOGON_TIME까지 주문;