2017-08-17 75 views
0

我杀了会议删除甲骨文打死会议

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; 

我也查了有关甲骨文所有Linux进程并没有发现僵尸:所有在场的过程对活动的会话保持一致。

编辑:这种情况不适用于所有死亡的会话。看起来PMON是活跃的,因为大部分被杀的会话在合理的时间内从列表中清除(通常需要一秒钟)。

可以做些什么来消除列表中的长时间死亡会话?

+0

在最坏的情况下,您必须重新启动数据库。 –

+0

@Wernfried Domscheit,我猜我会的。但在此之前,我想了解为什么会发生这种情况,是否有一种不太残酷的方式来进行清理。 – diziaq

回答

0

这些应该由PMON自动清除,但有时候在卡住的过程中需要'醒来'。

要唤醒PMON,先获得PID使用

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

如果PID是6然后使用发送唤醒呼叫:

ORADEBUG WAKEUP 6

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

+0

显然,PMON是活跃的,因为其他会话被命令杀死,目前几乎立即从列表中消失。尽管如此,该问题所涉问题的会议仍处于KILLED状态超过10天。 – diziaq

+0

你尝试过唤醒吗?这是一种强制PMON清理的方式,即使它对正常关闭或放松的会话也是有效的。 – sandman

+0

是的,我将SYS连接为SYSDBA。执行ORADEBUG WAKEUP 2(这是PMON的当前pid)。得到的回应'处理的声明'。会议仍处于KILLED状态。 – diziaq