关闭

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

768人阅读 评论(0) 收藏 举报

我们经常会遇到在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命令,问题解决。

 

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:53030次
    • 积分:634
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类