定位Oracle kill命令未实际中断的Session/Process

来源:互联网 发布:淘宝一族的货在哪进货 编辑:程序博客网 时间:2024/06/05 08:41

我们经常会遇到在Oracle中执行某条命令或存储过程,执行时间比预想的要长很多,才发现是自己的失误,想要中止执行的语句或者存储过程,一般的前台开发工具都支持这种Cancel功能,但是不是总能顺利的完成,最近遇到一次:

 

有个兄弟找我说,有个存储过程好像被锁定了,是在执行的时候发现错误,强行中止,但却无法再打开存储过程进入编译状态,我们用的是share server模式,以前有遇到类似的情况,一般通过查询v$access可以确定sid,再找到v$session进行alter system kill,但是多数时候这是没有办法成功的,session只是被标记成KILLED状态,其实后台的进程还在执行,如果你开始没有注意你kill的session的process信息,你此时可能会手足无措,因为被标记为KILLED状态的session已经不再对应kill前的pid了,所以你想用操作系统的kill命令可能都找不到对象,最后,在v$shared_server中找到了线索,s003一直处于EXEC状态,其对应的pid也没有找到相应的session,而且我们的OLTP系统一般是不会执行长操作的,所以定位到s003,于是到操作系统中使用kill -9 pid命令,问题解决。

 

以上个人经历分享,给大家参考。

原创粉丝点击