1. 程式人生 > >Oracle資料庫"記錄被另一個使用者鎖住"解決方法

Oracle資料庫"記錄被另一個使用者鎖住"解決方法

1、先來看看為什麼會出鎖住:

    資料庫是一個多使用者使用的共享資源。當多個使用者併發地存取資料時,在資料庫中就會產生多個事務同時存取同一資料的情況。若對併發操作不加控制就可能會讀取和儲存不正確的資料,破壞資料庫的一致性。



    加鎖是實現資料庫併發控制的一個非常重要的技術。當事務在對某個資料物件進行操作前,先向系統發出請求,對其加鎖。加鎖後事務就對該資料物件有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此資料物件進行更新操作。

    在資料庫中有兩種基本的鎖型別:排它鎖(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)。當資料物件被加上排它鎖時,其他的事務不能對它讀取和修改。加了共享鎖的資料物件可以被其他事務讀取,但不能修改。資料庫利用這兩種基本的鎖型別來對資料庫的事務進行
併發控制
2、解決方法:

用管理員賬號登入資料庫,執行sql:

  1. SELECT object_name, machine, s.sid, s.serial#   
  2. FROM gv$locked_object l, dba_objects o, gv$session s   
  3. WHERE l.object_id = o.object_id   
  4. AND l.session_id = s.sid;

找到對應鎖住的表執行:

  1. --釋放SESSION SQL:   
  2. --alter system kill session 'sid, serial#';   
  3. ALTER system kill session '23, 1647';