加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何kill掉oracle 正在连接 的session

发布时间:2020-12-12 14:50:49 所属栏目:百科 来源:网络整理
导读:Oracle中造成一些表被死锁或者会话异常退出,如执行了更新记录操作后,既没有commit也没有rollback,网络就断开了,也会造表或记录被锁住,待到超时后才会被解开,那样都会造成应用操作被阻塞。 可以以Oralce管理员权限用户登录Oracle数据,查询到被锁的对象

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

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

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

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

    FROM v$locked_objecta,dba_objectsb,v$sessionc

    WHERE a.object_id=b.object_id

    AND a.SESSION_ID=c.sid(+)


杀Seesion的SQL语句语法如下:

    altersystemkillsession'sid,serial#'

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

    altersystemkillsession'53,663'

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

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

SELECT 'alter system kill session ''' || c.sid || '' || ',' || c.serial# ||''';',

a.object_id,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读