오늘은 Oracle Session Kill에대해 글을 써보도록하겠습니다.
Database를 운영하다보면 특정 Session 을 Kill해야 하는일이 생기게된다. 자주 발생하는 예로는 Lock이 발생하였을때 Lock 을 유발시킨 Session을 Kill하게 됩니다.
USERNAME이 LEE인 USER의 SID,SERIAL#을 확인하였다.
SQL> select username,sid,serial#,status from v$session where username='LEE';
USERNAME SID SERIAL# STATUS
------------------------------ ---------- ---------- --------
LEE 191 5 INACTIVE
Session KILL ( ALTER SYSTEM KILL ) |
alter system kill session 명령어를 이용하여 LEE USER를 KILL하였다.
SQL> alter system kill session '191,5' immediate;
System altered.
SQL> select username,sid,serial#,status from v$session where username='LEE';
no rows selected
* RAC인경우에는 아래 명령어로 다른 INSTANCE의 SESSION도 KILL 가능하다.
alter system kill session '191,5,@instid' immediate;
SQL> alter system kill session '191,5,@2' immediate;
간혹 alter sysetm으로 session을 kill하였으나 해당 Session이 죽지않고 killed 상태로 남아있는 경우가 있다. 이때는 Session의 PID를 확인하여 OS에서 KIll을 해주어야한다.
SQL> select username,sid,serial#,status from v$session where username='LEE';
USERNAME SID SERIAL# STATUS
------------------------------ ---------- ---------- --------
LEE 191 5 KILLED
SQL> select s.username,s.sid,s.serial#,p.spid from v$process p, v$session s where p.ADDR=s.paddr and s.username='LEE';
USERNAME SID SERIAL# SPID
------------------------------ ---------- ---------- ------------------------
LEE 191 5 25021
[orcl11]ora11@hy:~ ps -ef | grep 25021
ora11 25021 19166 0 17:05 ? 00:00:00 oracleorcl11 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
[orcl11]ora11@hy:~ kill -9 25021
[orcl11]ora11@hy:~ sqlplus / as sysdba
SQL> select s.username,s.sid,s.serial#,p.spid from v$process p, v$session s where p.ADDR=s.paddr and s.username='LEE';
no rows selected