Oracle資料庫"記錄被另一個使用者鎖住"解決方法
阿新 • • 發佈:2019-02-08
1、先來看看為什麼會出鎖住:
資料庫是一個多使用者使用的共享資源。當多個使用者併發地存取資料時,在資料庫中就會產生多個事務同時存取同一資料的情況。若對併發操作不加控制就可能會讀取和儲存不正確的資料,破壞資料庫的一致性。
加鎖是實現資料庫併發控制的一個非常重要的技術。當事務在對某個資料物件進行操作前,先向系統發出請求,對其加鎖。加鎖後事務就對該資料物件有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此資料物件進行更新操作。
在資料庫中有兩種基本的鎖型別:排它鎖(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)。當資料物件被加上排它鎖時,其他的事務不能對它讀取和修改。加了共享鎖的資料物件可以被其他事務讀取,但不能修改。資料庫利用這兩種基本的鎖型別來對資料庫的事務進行併發控制。
2、解決方法:
用管理員賬號登入資料庫,執行sql:
- SELECT object_name, machine, s.sid, s.serial#
- FROM gv$locked_object l, dba_objects o, gv$session s
- WHERE l.object_id = o.object_id
- AND l.session_id = s.sid;
找到對應鎖住的表執行:
- --釋放SESSION SQL:
- --alter system kill session 'sid, serial#';
- ALTER system kill session '23, 1647';