ITPUB??ì3
ITPUB论坛 » Oracle数据库管理 » 我使用Alter System Kill Session 后发现V$session中的PADDR改变了,这是为什么?

标题: [精华] 我使用Alter System Kill Session 后发现V$session中的PADDR改变了,这是为什么?
离线 hwlbigboy
初级会员



精华贴数 1
个人空间 0
技术积分 183 (11151)
社区积分 0 (60386)
注册日期 2002-4-4
论坛徽章:0
      
      

发表于 2004-6-25 13:45 
我使用Alter System Kill Session 后发现V$session中的PADDR改变了,这是为什么?为什

我使用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)?哪位可以帮帮我?


只看该作者    顶部
离线 catherine9999
中级会员


精华贴数 0
个人空间 0
技术积分 456 (4757)
社区积分 0 (101884)
注册日期 2003-9-16
论坛徽章:1
在线时间     
      

发表于 2004-6-25 15:02 
想要判断出那些process为已经被kill掉可以通过视图x$ksupr


__________________
闲中好,尘务不萦心。坐对当窗木,看移三面阴。
只看该作者    顶部
离线 hwlbigboy
初级会员



精华贴数 1
个人空间 0
技术积分 183 (11151)
社区积分 0 (60386)
注册日期 2002-4-4
论坛徽章:0
      
      

发表于 2004-6-25 15:13 
谢谢你的回答
但是我用system用户登陆执行
select * from x$ksupr
时报错
ORA-00942:table or view does not exist
这是怎么回事啊?还请大虾指点!


只看该作者    顶部
离线 remen
高级会员


精华贴数 1
个人空间 0
技术积分 6667 (234)
社区积分 5 (17109)
注册日期 2003-9-12
论坛徽章:11
会员2007贡献徽章会员2006贡献徽章授权会员2009新春纪念徽章数据库板块每日发贴之星ERP板块每日发贴之星
数据库板块每日发贴之星生肖徽章2007版:鸡ITPUB新首页上线纪念徽章数据库板块每日发贴之星数据库板块每日发贴之星 

发表于 2004-6-25 15:18 
你需要用sys登陆进行查询!


只看该作者    顶部
离线 hwlbigboy
初级会员



精华贴数 1
个人空间 0
技术积分 183 (11151)
社区积分 0 (60386)
注册日期 2002-4-4
论坛徽章: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支会改变,不是原来的那个值了!

怎么办?




只看该作者    顶部
离线 catherine9999
中级会员


精华贴数 0
个人空间 0
技术积分 456 (4757)
社区积分 0 (101884)
注册日期 2003-9-16
论坛徽章:1
在线时间     
      

发表于 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,你可以自己做实验验证


__________________
闲中好,尘务不萦心。坐对当窗木,看移三面阴。
只看该作者    顶部
离线 catherine9999
中级会员


精华贴数 0
个人空间 0
技术积分 456 (4757)
社区积分 0 (101884)
注册日期 2003-9-16
论坛徽章:1
在线时间     
      

发表于 2004-6-25 15:48 
根据x.addr可以在v$process中找到对应的spid


__________________
闲中好,尘务不萦心。坐对当窗木,看移三面阴。
只看该作者    顶部
离线 hwlbigboy
初级会员



精华贴数 1
个人空间 0
技术积分 183 (11151)
社区积分 0 (60386)
注册日期 2002-4-4
论坛徽章: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中

你觉得呢?

还有别的办法吗??



只看该作者    顶部
离线 catherine9999
中级会员


精华贴数 0
个人空间 0
技术积分 456 (4757)
社区积分 0 (101884)
注册日期 2003-9-16
论坛徽章:1
在线时间     
      

发表于 2004-6-25 16:19 
你那么看不行,用我的语句试试。
并不是说更改后的paddr能在x$ksupr中找到,而是从x$ksupr中能看出来有些prcocess没有username,没有status,再根据其他的字段一起判定改process已经被kill掉。


__________________
闲中好,尘务不萦心。坐对当窗木,看移三面阴。
只看该作者    顶部
离线 hwlbigboy
初级会员



精华贴数 1
个人空间 0
技术积分 183 (11151)
社区积分 0 (60386)
注册日期 2002-4-4
论坛徽章: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呢??

谢谢!


只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰网域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:060528号 联系我们 法律顾问