博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何杀掉(kill)Oracle中的会话(Session)
阅读量:7152 次
发布时间:2019-06-29

本文共 990 字,大约阅读时间需要 3 分钟。

Oracle中造成一些表被死锁或者会话异常退出,如执行了更新记录操作后,既没有commit也没有rollback,网络就断开了,也会造表或记录被锁住,待到超时后才会被解开,那样都会造成应用操作被阻塞。

可以以Oralce管理员权限用户登录Oracle数据,查询到被锁的对象,然后杀除指定的会话。

用下面的语句查询被锁的对象,可以带上更多约束条件,如schemaname等更精确的匹配。

    SELECT  a.object_id, a.session_id, b.object_name, c.*   

    FROM  v$locked_object a, dba_objects b, v$session c  

    WHERE  a.object_id = b.object_id  

    AND  a.SESSION_ID = c.sid(+)   

杀Seesion的SQL语句语法如下:

    alter system kill session 'sid, serial#'   

如上面查出来的一条记录的sid是53, serial#为663,就执行以下的语句

    alter system kill session '53,663'   

如果要一次性杀死多个会话,一个一个填写sid和serial#十分的繁琐,应该在查询被锁对象的同时拼凑出多条的杀会话语句,以分号分隔,一起复制下来,然后就可以批量的执行了。

拼凑kill语句的方式如下,下面加了一个过滤条件和一个排序,杀除真正关心的表,并且着重注意超时时间过长的会话。

 
SELECT 'alter system kill session ''' || c.sid || '' || ',' || c.serial# ||''';',
       a.object_id, a.session_id, b.object_name, c.*
  FROM v$locked_object a, dba_objects b, v$session c
 WHERE a.object_id = b.object_id
   AND a.SESSION_ID = c.sid(+)
   AND schemaname = 'Unmi'
 ORDER BY logon_time

转载于:https://www.cnblogs.com/MFLY/p/5113492.html

你可能感兴趣的文章
C /C ++中结构体的定义
查看>>
windows8.1下android开发环境搭建(Eclipse+Android sdk+ADT+Genymotion)
查看>>
nginx中常见的变量
查看>>
TSQL基本编程
查看>>
linux中nginx安装
查看>>
连接数据库报错:句柄无效
查看>>
使用update!导致的更新时候的错误信息不显示 ruby on rails
查看>>
AutoFac文档14(转载)
查看>>
TreeView 折叠所有
查看>>
Canvas——使用定时器模拟动态加载动画!
查看>>
移动端Css初始化
查看>>
混合拉普拉斯分布(LMM)推导及实现
查看>>
does not contain method named
查看>>
(C#)Windows Shell 外壳编程系列1 - 基础,浏览一个文件夹
查看>>
一个while循环
查看>>
resize2fs
查看>>
c# 捕获一般获取不到的异常
查看>>
CCNP第三天 EIGRP综合实验
查看>>
JavaScript学习(十三)---RegExp对象
查看>>
leetcode_238. Product of Array Except Self_思维
查看>>