Chinaunix首页 | 论坛 | 博客
  • 博客访问: 76550
  • 博文数量: 38
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 425
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-13 15:19
文章分类

全部博文(38)

文章存档

2009年(12)

2008年(26)

我的朋友

分类: Oracle

2008-04-18 17:25:23

干掉标记为KILLED的session

 

作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就搞定.这种情况比较少见,不过也会发生,比如我上午就碰到了

阅读(644) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~