본문 바로가기

IT 이야기/데이터베이스(DB)

오라클 락(lock) 확인 및 KILL

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

오라클 락(lock) 확인 및 KILL


개발을 하다 보면 오라클에 락이 걸려 특정 페이지만 에러가 발새하는 경우가 있다 이럴때 오라클에 특정 테이블에 락이 걸려 그러는 경우가 있는데 일러때는 오라클 락을 확인해 봐야 한다.


1. 락걸린 테이블 확인 

SELECT  DO.OBJECT_NAME, DO.OWNER, DO.OBJECT_TYPE, DO.OWNER,

        VO.XIDUSN, VO.SESSION_ID, VO.LOCKED_MODE

FROM    V$LOCKED_OBJECT VO, DBA_OBJECTS DO

WHERE   VO.OBJECT_ID = DO.OBJECT_ID;


2. 해당 테이블에 LOCK 확인.

SELECT A.SID, A.SERIAL#, B.TYPE, C.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 IN ('테이블명');


3. 락발생 사용자와 SQL, OBJECT 조회

SELECT DISTINCT X.SESSION_ID, A.SERIAL#, D.OBJECT_NAME, A.MACHINE, A.TERMINAL,

                A.PROGRAM, B.ADDRESS, B.PIECE, B.SQL_TEXT

FROM V$LOCKED_OBJECT X, V$SESSION A, V$SQLTEXT B, DBA_OBJECTS D

WHERE X.SESSION_ID = A.SID AND 

X.OBJECT_ID = D.OBJECT_ID AND A.SQL_ADDRESS = B.ADDRESS 

ORDER BY B.ADDRESS, B.PIECE;


4. 현재 접속자의 SQL 분석

SELECT DISTINCT A.SID, A.SERIAL#,

       A.MACHINE, A.TERMINAL, A.PROGRAM,

       B.ADDRESS, B.PIECE, B.SQL_TEXT

FROM  V$SESSION A, V$SQLTEXT B

WHERE A.SQL_ADDRESS = B.ADDRESS

ORDER BY A.SID, A.SERIAL#, B.ADDRESS, B.PIECE


5. 접속 사용자 제거

ALTER SYSTEM KILL SESSION 'SESSION_ID, SERIAL#';

ex> alter system kill session '5, 1';



6. 현재 접속자의 sql 분석

SELECT DISTINCT X.SESSION_ID, A.SERIAL#, D.OBJECT_NAME, A.MACHINE, A.TERMINAL,

       A.PROGRAM, A.LOGON_TIME, 'ALTER SYSTEM KILL SESSION'''||A.SID||', '||A.SERIAL#||''';'

FROM GV$LOCKED_OBJECT X, GV$SESSION A, DBA_OBJECTS D

WHERE  X.SESSION_ID = A.SID AND X.OBJECT_ID = D.OBJECT_ID

ORDER BY LOGON_TIME;