失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > oracle session status killed 进程状态为KILLED的进程如何杀掉

oracle session status killed 进程状态为KILLED的进程如何杀掉

时间:2019-06-01 15:10:33

相关推荐

oracle session status killed 进程状态为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 -11-19 15:02:56

81 102 KILLED PSEUDO pts/ta -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@]

如果觉得《oracle session status killed 进程状态为KILLED的进程如何杀掉》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。