Patrick's 데이터 세상

오라클 DB LOCK 걸린 개체 확인 & LOCK 해제 본문

Programming/Oracle

오라클 DB LOCK 걸린 개체 확인 & LOCK 해제

patrick610 2020. 6. 21. 15:16
반응형
SMALL

오라클 사용 시 여러 가지 원인에 의해 DB가 LOCK이 걸리는 현상을 종종 발견할 수 있습니다. 
TOAD나 ORANGE와 같은 DBMS 관리 프로그램에서는 모니터링을 바로 확인할 수 있으나 SQL Developer는 쿼리 구문을 통해 현재 DB Lock이 걸린 테이블과 sid 등 정보를 확인해야 합니다.

 

1. LOCK 걸린 개체 확인

SELECT A.SID
     , A.SERIAL#
     , object_name
     , A.SID || ', ' || A.SERIAL# AS KILL_TASK
FROM V$SESSION A
INNER JOIN V$LOCK B
   ON A.SID = B.SID
INNER JOIN DBA_OBJECTS C
   ON B.ID1 = C.OBJECT_ID
WHERE B.TYPE = 'TM';

Object_name으로 해당 TABLE이 LOCK이 걸린 것을 확인할 수 있습니다.
SID, SERIAL#로 LOCK이 걸린 테이블의 SESSION을 KILL 합니다.


2. SID, 시리얼 번호로 세션 KILL

 ALTER SYSTEM KILL SESSION '401, 12761';

LOCK이 걸린 해당 테이블의 SID와 시리얼 번호를 이용하여 세션을 KILL 합니다.

3. LOCK 발생 SESSION_ID, OBJECT 조회 & LOCK 발생 SQL문 확인

SELECT DISTINCT A.SESSION_ID
     , B.SERIAL#
     , D.OBJECT_NAME
     , B.MACHINE
     , B.TERMINAL
     , B.PROGRAM
     , C.ADDRESS
     , C.PIECE
     , C.SQL_TEXT
FROM V$LOCKED_OBJECT A
   , V$SESSION B
   , V$SQLTEXT C
   , DBA_OBJECTS D
WHERE 1=1
AND A.SESSION_ID = B.SID
AND A.OBJECT_ID = D.OBJECT_ID
AND B.SQL_ADDRESS = C.ADDRESS
ORDER BY C.ADDRESS, C.PIECE;

해당 구문을 활용하여 LOCK을 발생시키는 SESSION_ID와 OBJECT를 확인하고, LOCK을 발생시키는 SQL TEXT구문을 확인할 수 있습니다.

반응형
LIST

'Programming > Oracle' 카테고리의 다른 글

ORACLE TIMESTAMP를 활용한 데이터 복원  (0) 2020.06.23
ANALYZE  (0) 2020.06.21
절차형 SQL  (0) 2020.06.21
DCL(DATA CONTROL LANGUAGE)  (0) 2020.06.21
그룹 내 비율 함수  (0) 2020.06.21
Comments