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'; 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章