打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
进程状态为KILLED的进程如何杀掉

有时候,我们在数据库中可能会出现数据库session被杀掉了,但是session状态还是killed,却不会被数据库回收.
如下面的状态:

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

SID SERIAL# STATUS SERVER TERMINAL LOGON_TIME
---------- ---------- ---------------- ------------------ ------------------------------ ---------------------
37 84 KILLED PSEUDO pts/tb 2010-11-19 15:02:56
81 102 KILLED PSEUDO pts/ta 2010-11-19 15:01:00

SQL>


对于这种情况,我们先不讨论是由于什么原因造成的,我们首先考虑该怎样把它从v$session表中去掉,也就是如何把他们杀掉?

(1)比较进程号
从数据库中取session中对应的进程号列表1
select spid from v$process where addr in (select paddr from v$session);

再从系统中取得该数据库启动的进程号列表2
ps -fu oracle|grep ORASID|grep -v grep|awk '{print $2}'


取得两个列表1和2,可以肯定,从操作系统中取得的进程列表2是比从数据库中取得的进程列表1是多的.
将列表2 减 列表1得出多出的进程为
20624,20626,5052,5517,20630,20628

登陆系统查询
hostname:/> ps -fu oracle|egrep -E "20624|20626|5052|5517|20630|20628"|grep -v egrep
oracle 20624 1 10 23:22:16 ? 0:11 ora_p000_ORASID
oracle 20626 1 10 23:22:16 ? 0:09 ora_p001_ORASID
oracle 5052 5005 0 15:01:00 ? 0:13 oracleORASID (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 5517 5510 0 15:02:56 ? 0:00 oracleORASID (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 20630 1 11 23:22:16 ? 0:09 ora_p003_ORASID
oracle 20628 1 11 23:22:16 ? 0:10 ora_p002_ORASID


对比进程的创建时间,和session的logon_time相符。而且其他进程都是并行进程,因此可以判断这两个被kill掉的session的系统进程号为5052,5517.
将这两个进程杀掉后等一小会儿,session消失

正常情况下,如果session被杀掉后,过一段时间数据库会自动回收这些session,有时候这个回收过程会持续很长

[@more@]
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ORA-00031:标记要删去的会话,但会话kill不掉
在linux下kill oracle的死进程
【Kill】两条Linux命令彻底杀死Oracle
oracle表查询速度极慢的处理过程记录一下
Oracle查看死锁
oracle关闭数据库时没反应的处理案例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服