Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92554811
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-21 21:02:59

  来源:

问:当一个session被kill掉以后,该session的paddr被修改,如果有多个session被kill,那么多个session的paddr都会被更改为相同的进程地址,在这种情况下,资源是无法的,我选择了查询spid,在操作系统级来kill这些进程。但是由于此时v $session.paddr已经改变,我已经无法通过v $session和v $process关联来获得spid,那还可以怎么办呢?

答:具体示例如下:

SQL> select p.addr from v $process p where pid
<> 1  2  minus  3  select s.paddr from v $session s;
ADDR
--------
542B70E8
542B7498

现在我们获得了进程地址,就可以在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。

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