分类: Oracle
2008-04-18 17:25:23
作dba,经常去kill一些session,一般我先从oracle中作alter system kill session,不会一开始就跑到os中去kill -9
但是有的时候,这个命令作下去以后,有的时候,系统不会提示system altered,而是提示说session marked killed,当提示这个的时候,就要注意了,这种提示出来,一般系统不会立刻释放被kill的session的资源,可能需要很久.
那么,这个时候,肯定想跑到os中用kill -9去干活.
不过这个时候,由于killed的session的paddr已经变成了一个虚拟的paddr,所以无法在v$process中得到该session在数据库主机的spid,给kill -9带来一些麻烦
一般的处理方法是先
select p.addr from v$process p where pid <> 1
minus
select s.paddr from v$session s;
去获取killed的sessin的真实的paddr,然后去os中kill -9
一般情况下,这种方式是能得到真实的paddr的,但是,如果被killed的session锁住了资源不释放,在v$locked_object中反映出来有锁住资源,用上面的方法,是得不到该session的paddr的,这个时候该怎么办?
其实这个时候得到paddr的方法更为简单,如果该session有占有锁资源不释放,在session被标记为killed以后,其paddr本身就是真实的,那么,只要直接查询v$process就可以得到,然后去kill -9就搞定.这种情况比较少见,不过也会发生,比如我上午就碰到了