Oracle_Kill_Session_终极篇

本文讲述了在Oracle数据库环境下,遇到无法通过Toad正常kill session的问题,作者详细介绍了如何使用命令行工具追踪已Killed但未关闭的session,并通过进程地址找到并强制结束相关spid的过程。涉及的技术包括v$session、vprocess和PL/SQL。森大网络科技提供GPS平台、网站建设等服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
https://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=1600

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 k s u p r x , v ksupr x,v ksuprx,vsession s where s.paddr(+)=x.addr and bitand(ksspaflg,1)!=0) a,(select p.addr from v p r o c e s s p w h e r e p i d < > 1 m i n u s s e l e c t s . p a d d r f r o m v process p where pid <> 1 minus select s.paddr from v processpwherepid<>1minusselects.paddrfromvsession s where s.status=‘KILLED’) b where a.addr = b.addr;

结果如图所示:

可以看到如上图所示,此处username、serial#、sid、status均为空的则是我们需要的已经被Killed的,我们可以通过此处的地址,在v p r o c e s s 中 找 到 s p i d 也 就 是 我 们 需 要 杀 的 进 程 , 下 面 没 行 后 面 跟 的 数 字 就 是 我 查 到 的 s p i d 。 s e l e c t s p i d f r o m v process中找到spid也就是我们需要杀的进程,下面没行后面跟的数字就是我查到的spid。 select spid from v processspidspidselectspidfromvprocess where addr =‘070000004F7BDE78’; 2597048
select spid from v p r o c e s s w h e r e a d d r = ′ 070000004 F 7 B 979 8 ′ ; 2609252 s e l e c t s p i d f r o m v process where addr ='070000004F7B9798'; 2609252 select spid from v processwhereaddr=070000004F7B9798;2609252selectspidfromvprocess where addr =‘070000004F79C6F8’; 463032
select spid from v p r o c e s s w h e r e a d d r = ′ 070000004 F 79 C E D 8 ′ ; 352444 s e l e c t s p i d f r o m v process where addr ='070000004F79CED8'; 352444 select spid from v processwhereaddr=070000004F79CED8;352444selectspidfromvprocess where addr =‘070000004F7A0DD8’; 1142874
select spid from v p r o c e s s w h e r e a d d r = ′ 070000004 F 7 B A 75 8 ′ ; 1519700 s e l e c t s p i d f r o m v process where addr ='070000004F7BA758'; 1519700 select spid from v processwhereaddr=070000004F7BA758;1519700selectspidfromvprocess where addr =‘070000004F7A05F8’; 1261676

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

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

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
https://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=1600

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值