오라클 락(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;
'IT 이야기 > 데이터베이스(DB)' 카테고리의 다른 글
오라클 V$LOCKED_OBJECT (0) | 2017.03.15 |
---|---|
오라클 세션(session) 확인 및 KILL (0) | 2017.03.15 |
오라클 데이터딕셔너리 성능 뷰(V$SQLAREA) (0) | 2017.03.15 |
오라클 세션접속 정보(V$SESSION) (0) | 2017.03.15 |
오라클 all_source (0) | 2017.03.08 |