ACTIVE 542B5E78 50 16 24085 0 1 ACTIVE 542B6228 754 15 24081 0 1 ACTIVE 542B65D8 1 14 24069 0 1 ACTIVE 542B6988 2 30 14571 0 1
USERNAME STATUS ADDR KSLLAPSC KSLLAPSN KSLLASPO KSLLID1R KS D ------------------------------ -------- -------- ---------- ---------- ------------ ---------- -- - SYS ACTIVE 542B6D38 2 8 24071 0 542B70E8 1 15 24081 195 EV 542B7498 1 15 24081 195 EV SYS INACTIVE 542B7848 0 0 0 SYS INACTIVE 542B7BF8 1 15 24081 195 EV
16 rows selected. 我们注意,红字标出的部分就是被Kill掉的进程的进程地址.
简化一点,其实就是如下概念: SQL> select p.addr from v$process p where pid <> 1 2 minus 3 select s.paddr from v$session s; ADDR -------- 542B70E8 542B7498 Ok,现在我们获得了进程地址,就可以在v$process中找到spid,然后可以使用Kill或者orakill在系统级来杀掉这些进程. 实际上,我猜测: 当在Oracle中kill session以后, Oracle只是简单的把相关session的paddr 指向同一个虚拟地址. 此时v$process和v$session失去关联,进程就此中断. 然后Oracle就等待PMON去清除这些Session.所以通常等待一个被标记为Killed的Session退出需要花费很长的时间. 如果此时被Kill的process,重新尝试执行任务,那么马上会收到进程中断的提示,process退出,此时Oracle会立即启动PMON 来清除该session.这被作为一次异常中断处理. 2004年6月25日 星期五 If you have any question,please mail to eygle@itpub.net .
上一页 [1] [2] |