PR

Oracle Database セッションをkillしても残るOSプロセスを探す方法

スポンサーリンク
ORACLE

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)