오라클에서 세션 확인과 락(LOCK)이 걸린 테이블을 확인하는 쿼리를 알아보겠습니다.
그리고 락이 걸린 세션을 해제하는 쿼리도 확인 해보겠습니다.
세션 확인 쿼리
데이터 베이스에 접속중인 세션을 확인 하고 싶을 때 사용하는 쿼리입니다.
SELECT
SID
, SERIAL#
, USERNAME
, PROGRAM
FROM
V$SESSION
현재 오라클DB에 작업을 요청한 세션 정보들이 출력됩니다.
모든 세션 정보가 출력된다고 보면 됩니다.
락 걸린 테이블 확인 쿼리
오라클 데이터 베이스를 사용하다보면 테이블에 락이 걸리는 경우가 있습니다.
이유는 잘못된 쿼리를 실행해서 락이 걸리거나 프로그램에서 잘못된 쿼리를 실행 시켜 테이블에 락이 걸리는 경우도 있고 테스트 하다가 쿼리를 잘못사용해서 테이블에 락이 걸리는등 여러 이유가 있습니다.
이러한 경우 어떤 테이블에 락이 걸렸는지 확인하는 쿼리입니다.
SELECT
V$SESSION.SID
, V$SESSION.SERIAL#
, V$SESSION.USERNAME
, DBA_OBJECTS.OBJECT_NAME
, V$SESSION.SADDR
, V$SESSION.OSUSER
, V$SESSION.PROGRAM
FROM V$LOCKED_OBJECT
LEFT JOIN DBA_OBJECTS
ON V$LOCKED_OBJECT.OBJECT_ID = DBA_OBJECTS.OBJECT_ID
LEFT JOIN V$SESSION
ON V$LOCKED_OBJECT.SESSION_ID = V$SESSION.SID
ORDER BY
V$SESSION.SID,
DBA_OBJECTS.OBJECT_NAME
오라클 데이터 베이스에서 작업도중 멈추거나 락이 걸려 있는 세션이 표시됩니다.
세션 해제 쿼리
특정 세션의 접속을 강제로 끊어야 할 겨우 또는 락이 걸린 테이블의 세션을 강제로 끊어야 할 경우 사용하는 쿼리 입니다.
alter system kill session 'SID, SERIAL#';
쿼리를 실행 하기 위해서는 SID(세션ID) 와 SERIAL#(시리얼 번호) 가 필요합니다.
세션 확인 쿼리 또는 락 걸린 테이블 확인 쿼리에서 취득한 SID 와 SERIAL#을 이용하여 세션을 해제합니다.
댓글