ORACLE查询通用查询被锁对象以及解锁方案

锁表锁存储过程遇到过好多次,有的是代码漏洞,没有回滚事物;有的时候就是网不好,存储过程调试着就断了,关了PLSQL之后,那个session其实还在,就锁死了,必须要手动杀死才行。之前有的项目还有这种情况,处理单据时,锁住单据行,然后回滚的时候其实不是同一个数据库连接对象,回滚了也没有,更有甚者,抛出异常了没有回滚,直接gg,锁了好多行。
1、2比较简单粗暴,疗效也不错
2、3比较稳,一个个确认后再杀死

1.查询所有被锁对象

SELECT SQL_TEXT
  FROM V$SQL
 WHERE HASH_VALUE IN
       (SELECT SQL_HASH_VALUE
          FROM V$SESSION
         WHERE SID IN (SELECT SESSION_ID FROM V$LOCKED_OBJECT));

2.释放所有被锁对象

DECLARE
  CURSOR MYCUR IS
    SELECT B.SID, B.SERIAL#   
      FROM V$LOCKED_OBJECT A, V$SESSION B   
     WHERE A.SESSION_ID = B.SID
     GROUP BY B.SID, B.SERIAL#;
BEGIN
  FOR CUR IN MYCUR LOOP
    EXECUTE IMMEDIATE ('alter system  kill session  ''' || CUR.SID || ',' ||
                      CUR.SERIAL# || ''' ');
  END LOOP;
END;

3.查询被锁对象详情

SELECT A.OWNER 方案名, 
       A.OBJECT_NAME 表名, 
       B.XIDUSN 回滚段号, 
       B.XIDSLOT 槽号, 
       B.XIDSQN 序列号, 
       B.SESSION_ID 锁表SESSION_ID, 
       B.ORACLE_USERNAME 锁表用户名, 
       decode(D.type, 
              'XR', 
              'NULL', 
              'RS', 
              'SS(Row-S)', 
              'CF', 
              'SS(Row-S)', 
              'TM', 
              'TABLE LOCK', 
              'PW', 
              'TABLE LOCK', 
              'TO', 
              'TABLE LOCK', 
              'TS', 
              'TABLE LOCK', 
              'RT', 
              'ROW LOCK', 
              'TX', 
              'ROW LOCK', 
              'MR', 
              'S(Share)', 
              NULL) 锁定方式, 
       
       C.MACHINE 用户组, 
       C.TERMINAL 机器名, 
       B.OS_USER_NAME 系统用户名, 
       B.PROCESS 系统进程id, 
       DECODE(C.STATUS, 'INACTIVE', '不活动', 'ACTIVE', '活动') 活动情况, 
       C.SERVER, 
       C.SID, 
       C.SERIAL#, 
       C.PROGRAM 连接方式, 
       C.LOGON_TIME 
  FROM ALL_OBJECTS A, V$LOCKED_OBJECT B, SYS.GV_$SESSION C, v$lock d 
WHERE (A.OBJECT_ID = B.OBJECT_ID) 
   AND (B.PROCESS = C.PROCESS) 
   and C.sid = d.sid 
   and B.LOCKED_MODE = D.LMODE 
ORDER BY 1, 2; 

4.杀死session

alter system kill session '391'; 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章