Oracle Kill Session 终极篇

Oracle admin 905℃ 0评论

Oracle Kill Session 终极篇

环境:

NLSRTL                                 10.2.0.2.0  Production

Oracle Database 10g Enterprise Edition 10.2.0.2.0  64bi

PL/SQL                                 10.2.0.2.0  Production

TNS for IBM/AIX RISC System/6000:       10.2.0.2.0  Productio

 

 

问题/解决:

    在用Toad 使用sys as dba用户登录,kill oracle session时,发现有一些session并杀不掉于是用命令行进行杀。

用于查找有所有session的语句:

select sid,serial#,username,status from v$session where status!=’KILLED’ and username is not null;

 

kill session的语句:

Alter system kill session ‘sid,serial#’;

 

Kill session后,需要等待一段时间,执行以下语句,看看是否有还有没有杀掉的进程:

select sid,serial#,username,status from v$session where status =’KILLED';

发现过了1个小时,还有以下四个进程并没有被杀掉,于是就需要强行杀掉该进程了。

 

SID    SERIAL# USERNAME                       STATUS

———- ———- —————————— ——–

1047        355 SYMBOLS                        KILLED

1059       1599 SYMBOLS                        KILLED

1103          1 SYS                            KILLED

1104          2 SYS                            KILLED

 

执行以下语句,此语句是为了获得进程地址:

select * from (select s.username,s.serial#,s.sid,s.status,x.addr,x.ksllapsc,x.ksllapsn,x.ksllaspo,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) a,(select p.addr from v$process p where pid <> 1

minus

select s.paddr from v$session s where s.status=’KILLED’) b where a.addr = b.addr;

 

结果如图所示:

2016-11-22_001955

可以看到如上图所示,此处username、serial#、sid、status均为空的则是我们需要的已经被Killed的,我们可以通过此处的地址,在v$process中找到spid也就是我们需要杀的进程,下面没行后面跟的数字就是我查到的spid。

select spid from v$process where addr =’070000004F7BDE78′; 2597048

select spid from v$process where addr =’070000004F7B9798′; 2609252

select spid from v$process where addr =’070000004F79C6F8′; 463032

select spid from v$process where addr =’070000004F79CED8′; 352444

select spid from v$process where addr =’070000004F7A0DD8′; 1142874

select spid from v$process where addr =’070000004F7BA758′; 1519700

select spid from v$process where addr =’070000004F7A05F8′; 1261676

 

这里有一个问题,就是我们上面在被killed的session只有4个,而这里却有7个,于是,我们需要在服务器上面查找相关的进程,如下图所示:

 

我发现在查找7个进程的时候,有4个后面明显带有f10001003ac24a0之类的地址,也就是f1000开头的,于是就kill掉这4个进程,在察看数据库中果然好了,哈哈。

转载请注明:森大科技官方博客 » Oracle Kill Session 终极篇

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址