락이 걸렸는지 확인하는 방법을 알아보겠습니다
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이 실행중이었는지 알 수 있습니다.
반응형
'CS(Computer Science) > 데이터베이스' 카테고리의 다른 글
[ORACLE] 날짜에서 요일 확인하는 방법 (1) | 2024.03.07 |
---|---|
[ORACLE] PL/SQL 에러 확인 (0) | 2024.02.06 |
[ORACLE] PL/SQL에서 쿼리 소요시간 확인하기 (0) | 2023.12.29 |
[ORACLE] 데이터 많을 때 count(*) 빠르게하기 (1) | 2023.11.06 |
[SQL 튜닝] 실행계획 (1) | 2023.09.10 |
댓글