Oracle資料庫鎖表解決方法

2021-09-25 01:14:11 字數 926 閱讀 1076

今天執行乙個刪除語句的時候,一直執行不了,最後發現是因為之前對這個表使用了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 的哪個埠上發出的。可用來追蹤出問題...