oracleに接続しているセッションをkillしても、V$SESSIONのステータスが[KILLED]になるだけで残り続けることがあります。
こうなった場合は、OSプロセスをkillする必要があります。
今回はセッションの特定からOSプロセスのkillまでの対処を紹介します。
DBセッションをkillする方法はこちらを参照してください。
Oracle Database DBセッションの強制切断方法 kill session
データベースのメンテナンス時に、DBセッションが残っているとメンテナンスが出来ない場合があります。そんな時にDBセッションを強制的に切断する方法を紹介します。
V$SESSIONから対象セッションのPADDRを探す
[oracle@smlsvr01 ~]$ sqlplus / as sysdba
SQL>
select paddr,sid,status,machine,program from v$session where status = 'KILLED';
PADDR SID STATUS MACHINE PROGRAM
---------------- ---------- -------- ---------- ------------------------------------------------
000000013C0D97C8 865 KILLED dekirusv ruby@dekirusv (TNS V1-V3)
##V$PROCESSから対象プロセスのSPID(OSのPID)を探す
SQL>
select SPID ,program from v$process where addr = '000000013C0D97C8';
SPID PROGRAM
---------- ------------------------------------------------
27288 oracle@orasrv
OSのプロセスをkillする
[oracle@orasrv ~]$ kill -9 27288
補足 (joinして1SQLで対象PIDを表示するSQL)
今回はOSのPIDを探すための手順を踏みましたが、V$SESSIONとV$PROCESSをJOINして1SQLでSPIDを求めることも可能です。
SQL>
select vp.spid, vs.paddr, vs.sid, vs.status, vs.machine, vs.program
from v$session vs, v$process vp
where vs.paddr = vp.addr
and vs.status = 'KILLED';
SPID PADDR SID STATUS MACHINE PROGRAM
---------- ---------------- ---------- -------- ---------- ------------------------------------------------
27288 000000013C0D97C8 865 KILLED dekirusv ruby@dekirusv (TNS V1-V3)