zoukankan      html  css  js  c++  java
  • 如何杀掉(kill)Oracle中的会话(Session)

    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
  • 相关阅读:
    一篇文章搞明白CORS跨域
    我从来不理解JavaScript闭包,直到有人这样向我解释它...
    将博客搬至CSDN
    Spring Boot缓存源码分析
    网站技术架构
    在springboot中使用Mybatis Generator的两种方式
    官方文档Core Technologies
    Java诊断工具Arthas
    Intellij IDEA 修改代码后自动编译更新
    TabHost选项卡的实现(二):使用Fragment实现
  • 原文地址:https://www.cnblogs.com/MFLY/p/5113492.html
Copyright © 2011-2022 走看看