删除 Oracle 终止会话

Removing Oracle killed session

我终止了一个会话

ALTER SYSTEM KILL SESSION '123,456' IMMEDIATE;

但它在 v$session 中保留了 5 天,尽管在 v$processes 中缺少附加进程。

SELECT
    s.username,
    s.osuser,
    s.sid,
    s.serial#,
    p.spid
  FROM v$session s, v$process p
 WHERE s.sid = '123'
   AND p.addr (+)= s.paddr;

我还检查了与 Oracle 相关的所有 Linux 个进程,没有发现僵尸:所有存在的进程都与活动会话一致。

编辑: 并非所有终止的会话都会发生这种情况。似乎 PMON 处于活动状态,因为大多数被杀死的会话都在合理的时间内从列表中清除(通常需要一秒钟)。

如何从列表中消除长时间播放的终止会话?

这些应该由 PMON 自动清理,但有时您需要 'wake it up' 在进程卡住的情况下。

要唤醒PMON,首先使用

获取PID
SELECT pid FROM v$process
WHERE addr = 
(
    SELECT paddr FROM v$bgprocess
    WHERE name = 'PMON'
);

如果 PID 为 6,则使用以下方式发送唤醒呼叫:

ORADEBUG WAKEUP 6

并且您可能必须重复该命令几次,直到清除失控的会话。