Patrick's 데이터 세상
오라클 DB LOCK 걸린 개체 확인 & LOCK 해제 본문
반응형
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