查看: 38523|回复: 22

[精华] 我使用Alter System Kill Session 后发现V$session中的PADDR改变了,这是为什么?

 关闭 [复制链接]
论坛徽章:
0
发表于 2004-6-25 13:45 | 显示全部楼层 |阅读模式
我使用Alter system kill session 'SID,SERIAL#' 将某个Session 删除后
发现Server上的资源未被释放,于是我想找到Server上该Session的进程号,然后用Kill -9 SPID杀掉它

我是这样通过SID去找SPID的:
select p.spid from v$session s,v$process p
where s.sid='sid' and s.paddr=p.addr
但是我发现这样根本找不到SPID,因为在执行Alter system kill session
后,这个Session的PADDR值会发生改变(而且在V$SESSION中所有STATUS为KILLED的PADDR 都会变为同一个值耶,真奇怪!)
这是怎么回事呀?我怎么找到一个STATUS为KILLED的SPID呢(因为我要在脚本中自动杀死这些SPID)?哪位可以帮帮我?
论坛徽章:
1
在线时间
日期:2007-03-25 04:01:01
发表于 2004-6-25 15:02 | 显示全部楼层
想要判断出那些process为已经被kill掉可以通过视图x$ksupr

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2004-6-25 15:13 | 显示全部楼层
谢谢你的回答
但是我用system用户登陆执行
select * from x$ksupr
时报错
ORA-00942:table or view does not exist
这是怎么回事啊?还请大虾指点!

使用道具 举报

回复
论坛徽章:
14
数据库板块每日发贴之星
日期:2005-05-15 01:01:24生肖徽章2007版:鸡
日期:2009-11-17 15:01:30生肖徽章2007版:马
日期:2009-10-22 08:53:062009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2008-12-28 01:01:02ERP板块每日发贴之星
日期:2008-11-29 01:01:04数据库板块每日发贴之星
日期:2008-04-25 01:01:54生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10
发表于 2004-6-25 15:18 | 显示全部楼层
你需要用sys登陆进行查询!

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2004-6-25 15:28 | 显示全部楼层
用SYS可以查到了
但是这个视图好像是已经被Kill掉的Process
我想要的是找在V$session中STATUS为KILLED的对应的PROCESS的SPID号(要知道这个主要是想通过SPID在OS上KILL掉进程释放资源),通过VSESSION和V$PROCESS关联PADDR和ADDR的方式找不到,因为KIll Session后V$session中的PADDR支会改变,不是原来的那个值了!

怎么办?

使用道具 举报

回复
论坛徽章:
1
在线时间
日期:2007-03-25 04:01:01
发表于 2004-6-25 15:46 | 显示全部楼层
你要得不就是被kill掉的吗?
用下面的语句来看
col username format a10

SELECT s.username,s.status,
x.ADDR,x.KSLLAPSC,x.KSLLAPSN,x.KSLLASPO,x.KSLLID1R,x.KSLLRTYP,
decode(bitand(x.ksuprflg,2),0,null,1)
FROM x$ksupr x,v$session s
WHERE s.paddr(+)=x.addr
and bitand(ksspaflg,1)!=0

里面的x.addr应该就是会有已经被kill的session的paddr,你可以自己做实验验证

使用道具 举报

回复
论坛徽章:
1
在线时间
日期:2007-03-25 04:01:01
发表于 2004-6-25 15:48 | 显示全部楼层
根据x.addr可以在v$process中找到对应的spid

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2004-6-25 16:02 | 显示全部楼层
我验证过了,还是不行

我KILL了三个Session(注意被KILL的Session在V$Session中的PADDR居然全部变成一样的了!)

SQL> select sid,serial#,paddr,status from v$session where status='KILLED';

       SID    SERIAL# PADDR    STATUS
---------- ---------- -------- ----------------
        14         30 026B9EB0 KILLED
        15          7 026B9EB0 KILLED
        16         34 026B9EB0 KILLED

SQL> select * from sys.x$ksupr where addr='026B9EB0';

沒有任何資料列被選取

这说明被KILLSession的PADDR(我是说变化后的)并不会出现在x$ksupr 视图中的ADDR中

你觉得呢?

还有别的办法吗??

使用道具 举报

回复
论坛徽章:
1
在线时间
日期:2007-03-25 04:01:01
发表于 2004-6-25 16:19 | 显示全部楼层
你那么看不行,用我的语句试试。
并不是说更改后的paddr能在x$ksupr中找到,而是从x$ksupr中能看出来有些prcocess没有username,没有status,再根据其他的字段一起判定改process已经被kill掉。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2004-6-25 16:35 | 显示全部楼层
我还是不明白
那到底怎么判断哪个ADDR是对应SESSION被KILLED的Process呢?

下面是我执行的结果
SELECT s.username,s.status,
x.ADDR,x.KSLLAPSC,x.KSLLAPSN,x.KSLLASPO,x.KSLLID1R,x.KSLLRTYP,
decode(bitand(x.ksuprflg,2),0,null,1)
FROM x$ksupr x,v$session s
WHERE s.paddr(+)=x.addr
and bitand(ksspaflg,1)!=0

1                        0269C854        0        0                0               
2                ACTIVE        0269CB7C        2        28        11336        0                1
3                ACTIVE        0269CEA4        8        32        10304        0                1
4                ACTIVE        0269D1CC        86        4        11388        0                1
5                ACTIVE        0269D4F4        7        14        11336        0                1
6                ACTIVE        0269D81C        11        13        11136        0                1
7                ACTIVE        0269DB44        1        10        10516        0                1
8        MES1        INACTIVE        0269DE6C        8        13        11136        85        EV       
9                        0269E194        0        0                0               
10        MES1        INACTIVE        0269E4BC        0        0                0               
按照你的判断哪一行是代表被KILL的Session呢??

谢谢!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表