删除Oracle已终止会话

时间:2017-08-17 08:22:31

标签: oracle session kill database-administration

我杀了一个会话

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处于活动状态,因为大多数被杀死的会话在合理的时间内从列表中清除(通常需要一秒钟)。

如何从列表中消除长时间杀死的会话?

1 个答案:

答案 0 :(得分:1)

这些应该由PMON自动清理,但有时您需要将其唤醒'在陷入困境的情况下。

要唤醒PMON,首先使用

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

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

  

ORADEBUG WAKEUP 6

并且您可能需要重复该命令几次,直到失控会话被清除。