<Lock걸린 부분이 있는지 확인>

SELECT C.OBJECT_NAME
     , B.SID
     , B.SERIAL#
     , 'ALTER SYSTEM KILL SESSION '''||B.SID||','||B.SERIAL#||''';'
FROM   V$LOCKED_OBJECT A
JOIN   V$SESSION B ON ( A.SESSION_ID = B.SID )
JOIN   DBA_OBJECTS C ON ( A.OBJECT_ID = C.OBJECT_ID );

위 쿼리로 세션을 Kill

 

 

<만약 Lock 내역이 보이지 않는다면>

SELECT A.LOCK_ID1
     , A.SESSION_ID
     , 'ALTER SYSTEM KILL SESSION '''||B.SID||','||B.SERIAL#||''';'
FROM   DBA_LOCK_INTERNAL A
JOIN   V$SESSION B ON ( A.SESSION_ID = B.SID )
WHERE  LOCK_ID1 LIKE '%object_name%';  --> Object Name 입력

- Lock이 걸린 것으로 의심되는 object의 이름을 넣어 위 쿼리로 확인

- 내역이 보이면 세션을 Kill 시킨다.

 

 

<하지만 여전히 세션 내역에 존재하고>

SELECT STATUS
FROM   V$SESSION
WHERE  SID = 'session_id';  --> Session ID 입력

위 쿼리의 결과(STATUS)가 'Killed'라고 나온다면

 

 

<서버에서 돌고있는 Lock 관련 프로세스 확인>

SELECT B.SPID
     , 'KILL -9 ' || B.SPID
FROM   V$SESSION A
JOIN   V$PROCESS B ON ( A.PADDR = B.ADDR )
WHERE  A.SID = 'session_id';  --> Session ID 입력

 

 

<프로세스 ID가 실제 존재하는지 서버에서 확인>

ps -ef | grep 프로세스ID

 

 

<서버 프로세스 kill>

#DB서버
kill -9 프로세스ID

 

Kill 후 쿼리로 세션 존재여부 확인

 

끝.

블로그 이미지

2010년1월어느날..

,