본문 바로가기
CS(Computer Science)/데이터베이스

[ORACLE] LOCK 걸린 개체 확인

by whdgus928 2024. 1. 10.

락이 걸렸는지 확인하는 방법을 알아보겠습니다

 

SELECT A.SID
     , A.SERIAL#
     , A.STATUS
     , 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 = 'table_name'
;

 

table_name에 테이블명을 집어넣고 쿼리를 돌린다

 

조회 결과 라인이 생기면 lock 걸린 세션을 찾을 수 있다

sid와 시리얼 번호로 세션 해제

 ALTER SYSTEM KILL SESSION 'sid, serial'
 ;

 

sid와 serial 자리에 락걸린 값을 집어넣으면 됩니다.

쿼리가 돌아가면 lock 걸린 테이블의 세션은 해제가 됩니다

 

여기서 조심할 점은 작업중인 SQL이 있을 수도 있다는 것입니다

SELECT DISTINCT T1.SESSION_ID
     , T2.SERIAL#
     , T4.OBJECT_NAME
     , T2.MACHINE
     , T2.TERMINAL
     , T2.PROGRAM
     , T3.ADDRESS
     , T3.PIECE
     , T3.SQL_TEXT
  FROM V$LOCKED_OBJECT T1
     , V$SESSION T2
     , V$SQLTEXT T3
     , DBA_OBJECTS T4
 WHERE 1=1
   AND T1.SESSION_ID = T2.SID
   AND T1.OBJECT_ID = T4.OBJECT_ID
   AND T2.SQL_ADDRESS = T3.ADDRESS
   ORDER BY T3.ADDRESS, T3.PIECE
   ;

이 쿼리를 통해 어떤 sql이 실행중이었는지 알 수 있습니다. 

반응형

댓글