블로그 이미지
redkite

카테고리

분류 전체보기 (291)
00.SI프로젝트 산출물 (0)
00.센터 운영 문서 (0)
01.DBMS ============.. (0)
01.오라클 (117)
01.MS-SQL (15)
01.MySQL (30)
01.PostgreSql (0)
01.DB튜닝 (28)
====================.. (0)
02.SERVER ==========.. (0)
02.서버-공통 (11)
02.서버-Linux (58)
02.서버-Unix (12)
02.서버-Windows (2)
====================.. (0)
03.APPLICATION =====.. (11)
====================.. (0)
04.ETC =============.. (0)
04.보안 (5)
====================.. (0)
05.개인자료 (1)
06.캠핑관련 (0)
07.OA관련 (1)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

ORA-00031: session marked for kill 의 해결책

 

 

[TroubleShootings]

테이블이 락이 걸려서 TOAD의 사용이 막힌 경우 테이블의 락을 풀어줘야 하는데, 보통은 SYSTEM 계정으로 접근하여 아래와 같은 쿼리를 입력하면 테이블의 락이 해제된다.
 
ALTER SYSTEM KILL SESSION '16,4558';
 (* ALTER SYSTEM KILL SESSION 'SID_no,SERIAL_no';)
 

하지만, 테이블 락을 해제 쿼리를 입력하여도 ORA-00031 : session marked for kill 의 메시지가 나오는 경우 직접적으로 아래의 쿼리를 이용하여 oracle계정으로 시스템에 접근하여 프로세스를 kill하는 방법이 있다.
 (kill을 하여도 락이 해제가 되지 않고, 앞서 session marked for kill이라는 메시지만 출력 되는 이유는 rollback을 하는 프로세스가 동작하여 kill을 해도 mark만 하고 rollback 중인 상태이므로 현재 락은 걸린 상태라고 볼 수 있을 것 같다.)
 

select vs.sid, vs.username, vs.osuser, vs.process fg_pid,
vp.spid bg_pid
from v$session vs, v$process vp
where vs.paddr = vp.addr;
위의 쿼리를 실행하여, PID(ProcessID)를 확인 후 오라클 계정으로 시스템에 접근하여, kill명령어를 이용하여 해당 프로세스를 종료한다.
 
$ kill -9 pid
 
물론 앞서 메시지가 나오고 방금 kill이 안되는 경우에도 어느정도 시간을 갖고 기다리면 rollback segment의 수치가 점점 작아져 결국 테이블 락이 해제가 된다.
 

 

Posted by redkite
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함