今天執行乙個刪除語句的時候,一直執行不了,最後發現是因為之前對這個表使用了for update語句,然後又忘記提交了,從而造成了該錶被鎖住。
(以下語句的執行,需要具有相應的許可權才可以執行,如果當前使用者沒有該許可權,請賦權或者使用管理員帳號)
執行下語句將查詢到有哪些表被鎖住了:
select b.owner,b.object_name,a.session_id,a.locked_mode,c.sid,c.serial#,c.logon_time
from v$locked_object a
inner join dba_objects b on b.object_id = a.object_id
inner join v$session c on a.session_id = c.sid
如下圖展示,可以看到scm_output_bill_detail表被鎖住了。
執行以下語句,解鎖:
alter system kill session '38,5216';
說明:這裡的38是sid,5216是locked_mode注意:造成鎖表的原因很多,不能說這裡看到有多少表被鎖住了,就一昧的將這些表全部釋放。例如:在對乙個表進行update操作,如果該操作還沒有完成,則這個表目前是被鎖住的,如果此時將該錶的鎖釋放,將造成不可預估的問題。
當然,一般的update語句比較快,如果想模擬出這種情況,建議寫乙個觸發器,對然後在觸發器中執行一些耗時的操作。此時在觸發器**執行完之前,這個表將一直被鎖住。
oracle資料庫 鎖表 解鎖
1 根據表名查詢鎖定的會話 select p.spid,c.object name,b.session id,a.serial b.oracle username,b.os user name from v process p,v session a,v locked object b,all ob...
Oracle資料庫鎖表解鎖
以下幾個為相關表 select from v lock select from v sqlarea select from v session select from v process select from v locked object select from all objects sele...
mysql鎖解決方法 mysql鎖表解決方法
如果有 super 許可權,則可以看到全部的執行緒,否則,只能看到自己發起的執行緒 id列 乙個標識,你要kill 乙個語句的時候很有用。user列 顯示當前使用者,如果不是root,這個命令就只顯示你許可權範圍內的sql語句。host列 顯示這個語句是從哪個ip 的哪個埠上發出的。可用來追蹤出問題...