반응형
http://itservice.sunatfood.com/382?category=6
ORA-00031: session marked for kill
Lock이 걸리는 종류는 여러가지가 있는데요. 그것에 대한 설명은 별도로 하겠습니다.
여기서는 Lock이 해제 되지 않는 경우 처리 되는 사항을 정리 합니다.
테이블이 Lock이 걸려서 특정 Row 또는 테이블을 수정할 수 없는 경우 일반적으로
Alter system kill session 'SID_no, SERIAL_no' ;
명령을 날려서 강제로 종료 하는 경우가 많을 것입니다.
그런데 이렇게 해도 해제가 되지 않고 오류메세지와 함께
'ORA-00031 : session marked for kill ' 이라는 메세지를 띄워주고 종료되버리죠
물론 기다리면 해제되는 경우가 일반적이고 정상적인 Rollback 처리를 위해서는 기다리는 걸 권합니다. 그러나 어쩔 수 없이 강제 해제를 시켜야 한다면 다음과 같이 처리 하시면 됩니다.
# 리눅스/유닉스 계열
SELECT
X.SID,
X.USERNAME,
X.OSUSER,
X.PROCESS AS FG_PID,
Y.SPID BG_PID
FROM V$SESSION X, V$PROCESS Y
WHERE X.PADDR = Y.ADDR ;
해당 쿼리를 SYSTEM 계정에서 실행하시고 PID(PROCESSID)를 확인 후 시스템 접근 후 해당 프로세스를 종료 하면 됩니다.
$KILL -9 PID
# 윈도우 계열
윈도우 계열에서는 유틸리티를 제공하는데 ORAKILL가 있습니다.
SELECT
X.SID,
X.USERNAME,
X.OSUSER,
X.PROCESS AS FG_PID,
Y.SPID BG_PID
FROM V$SESSION X, V$PROCESS Y
WHERE X.PADDR = Y.ADDR ;
* ORACL = SID
* 1234 = BG_PID
C:\>ORAKILL ORACL 1234;
이렇게 처리 하면 해당 프로세를 강제 종료하여 해당 세션의 값을 강제 종료 할 수 있다. 그러나 가급적 LOCK이 걸렸을 때에는 원인을 분석하여 해당 쿼리 또는 응용프로그램을 확인한 후 처리 하는 것을 권고 한다.
반응형