首页  ·  知识 ·  
Label
      编辑:  图片来源:网络
oracle在做alter system kill session 'sid,serial#'时,如果被杀掉的session占有锁资源,则oracle要先去释放该锁,如果锁未能释放,
oracle将不会去修改v$session中的paddr值,所以,当输入alter system kill session命令后,有2种返回结果,如果是正常资源释放了,将返回
System altered.如果仍然有锁资源,将返回ORA-00031: session marked for kill,此时就要区别对待了:
1)返回ORA-00031: session marked for kill 查看v$locked_object,如果被杀进程仍然占有锁资源,则可直接根据v$session中的paddr去
v$process中找到对应的os进程,kill -9 ,如下:
查看锁资源:
select t2.username,t2.sid,t2.serial#,t2.logon_time,t1.object_id,t1.process,t1.locked_mode
from v$session t2 , v$locked_object t1
where t1.session_id=t2.sid order by t2.logon_time ;
找到对应OS进程:
select a.spid
from v$process a , v$session b
where a.addr=b.paddr and b.sid=&sid ;
PS:可以通过这个语句查看详细点的信息
select object_name ,machine,s.program,s.sid,s.serial#,p.spid
from v$locked_object l,dba_objects o ,v$session s ,v$process p
where l.object_id=o.object_id
and l.session_id=s.sid
and s.paddr=p.addr;
2)返回System altered如果已经没有锁定资源,但是SESSION状态仍然为KILLED,想彻底清除该进程,因为此时V$SESSION中的PADDR值一被更改,
无法根据它来找到对应的真实的OS进程,需要做其他处理,基本思路为要找到原SESSION的真实PADDR,根据它去V$PROCESS中找到真实的系统
进程,然后KILL -9.
找到已经被KILL的SESSION的真实PADDR:
select p.addr from v$process p where pid <> 1
minus
select s.paddr from v$session s;
根据这个真实的PADDR,查询真实的OS ID
select spid
from v$process
where addr = &addr ;

从主机杀所有外部连接:
ps -ef | grep oracle | grep 'LOCAL=NO' | grep -v grep | awk '{ print $2}' | xargs kill -9
 
本文作者:Mike.Xu 来源:网络
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的
收藏至微信