zoukankan      html  css  js  c++  java
  • Oracle锁表处理

    最近系统连续出现好几次锁表,昨晚又发生一次锁表,11点钟跑到客户现场,进过跟踪发现导致这次锁表的机器和上一次是同一台,花了近半小时解锁。之后到科室找到那台机器看看情况,发现那台机器速度超慢,保存一份病历需要几十秒钟,原因应该就在这里了。

    分析原因:保存病历时发生超时,Nhibernate在发生超时时事务需要进行回滚,但是回滚的时候也发生了异常,没有回滚成功,导致了锁表。

    处理方法:a、先解决该机器速度慢的问题,配置太差的机器要求医院进行硬件升级;b、验证事务回滚的时候是否有可能发生回滚异常。

    先贴出现场处理死锁的步骤。

    另外:有时候通过PL/SQL执行kill session可能仍然无法解锁,此时需要登陆到Oracle服务器将进程kill掉才行。

    1、生成Kill Session语句

    select 'alter system kill session ''' || SID ||',' || SERIAL# || ''';' from

    (

    select distinct a.sid, a.Serial#, status, machine, LOCKWAIT, logon_time

      from v$session a, v$locked_object b

     where (a.status = 'ACTIVE' or a.status = 'INACTIVE')

       and a.sid = b.session_id

       and b.ORACLE_USERNAME='XYHISTEST'--加上用户名是避免把其他系统的会话也关闭,以免伤及无辜

    )

    2、批量执行第一步生成的语句

    alter system kill session 'sid,serial#';

    --alter system kill session '6976,33967';

    3、查询oracle用户名,机器名,锁表对象

    SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username,

    l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time

    FROM v$locked_object l, all_objects o, v$session s

    WHERE l.object_id = o.object_id

    AND l.session_id = s.sid

    ORDER BY sid, s.serial# ;

    /*或者

    select s.SID, s.OSUSER, p.spid as OSPID, s.MACHINE, s.TERMINAL, s.PROGRAM

      from v$session s, v$process p

     where s.sid = 6  --session_id

       and s.paddr = p.addr;

    */

    4、查询是执行何sql语句导致锁表的

    select b.sql_text

      from v$session a, v$sql b

     where a.sid = 6 --session_id

       and a.SQL_ADDRESS = b.ADDRESS(+);

     /*--或者

    SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,

    l.os_user_name,s.machine, s.terminal,a.sql_text, a.action

    FROM v$sqlarea a,v$session s, v$locked_object l

    WHERE l.session_id = s.sid

    AND s.prev_sql_addr = a.address

    ORDER BY sid, s.serial#;

    */

     

  • 相关阅读:
    剑指offer:2.二维数组的查找(Java版)
    剑指offer:1.找出数组中重复的数(java版)
    Java自动内存管理机制学习(二):垃圾回收器与内存分配策略
    Java自动内存管理机制学习(一):Java内存区域与内存溢出异常
    Java并发编程学习:线程安全与锁优化
    Java并发编程学习:volatile关键字解析
    Java 8之重新认识HashMap
    【转】java内部类的作用分析
    不能进入String.class调试
    SCJP考试题310-025(第二套<4>)92-147/147
  • 原文地址:https://www.cnblogs.com/hangwq/p/3527969.html
Copyright © 2011-2022 走看看