Oracle資料庫表被鎖

2021-07-04 14:53:13 字數 1511 閱讀 9214

1、資料庫表被鎖的現象

在運算元據庫時,有的時候我們會很突然的遇到資料庫報下面這個錯誤

[sql]view plain

copy

ora-00054: resource busy 

andacquire 

with

nowait specified  

第乙個可能的原因是在lock table 和select for update 的句子中有nowait關鍵字導致報錯。nowait關鍵字的意思是當你要鎖定某一資源時,如果該資源正被別的使用者鎖定則直接返回錯誤資訊,而不是等待別的使用者解鎖。

第二個原因是你執行了ddl語句並且這個ddl 無法獲得需要的鎖。

2、表被鎖的解決辦法

第一種辦法是「治病」,採用如下方法可以解決眼前遇到的問題,既然表被鎖,那麼解鎖就是了。 

[sql]view plain

copy

select

a.username,decode(b.type,

'tm'

,'table lock'

,'tx'

,'row lock'

,null

) lock_level,  

c.owner,c.object_name,c.object_type,  

a.sid,a.serial#,a.terminal,a.machine,a.program,a.osuser  

from

v$session a,v$lock b,dba_objects c  

where

b.sid = a.sid  

andb.id1 = c.object_id(+)  

anda.username 

isnot

null

;  

找到被鎖的表,執行以下語句解鎖

[sql]view plain

copy

alter

system kill session 

'sid,serial#'

;  

以上方法是看病就醫的辦法,難保以後還回遇到這個問題,下面看看另乙個辦法。

第二種辦法是「治本」,這個辦法是oracle_11g才適用的方法,

[sql]view plain

copy

alter

session 

setddl_lock_timeout = 600;   或者

[sql]view plain

copy

alter

system 

setddl_lock_timeout = 600;  

這種方法是設定系統或會話的鎖定時間。這個辦法實際上也不是治本的方法,但是可以減少人工操作罷了,要想治本還是要求我們的開發人員和資料庫使用人員在運算元據庫的時候記得要commit。

Oracle資料庫表被鎖與解鎖

本人小菜鳥,今天在專案中遇到了乙個令我費解的問題,就是我之前寫的運算元據的方法全部都不能用了,例如儲存 修改 刪除全部都不能用了 打斷點進去一步一步走發現在運算元據的時候出的問題,後台也不會報錯,糾結了好長時間啊,中午吃飯的時候討論到這個問題,大神一語道破其中奧妙啊,他說可能是資料庫表鎖死啦。哎呦喂...

Oracle資料庫被鎖表後,如何解決!

今天本來要修改測試庫程式版本的,發現被卡住了。一直無法完成,後來發現是表被鎖死了。然後通過網上們帖子的幫助,成功的解決了問題。這裡記錄一下 1.首先檢視當前資料庫中,哪些表被鎖住了,找到對應的session id 執行此語句 select b.owner,b.object name,a.sessio...

Oracle資料庫表被鎖了,如何解鎖

1.首先檢視資料庫中哪些表被鎖了,找到session id 使用sql select b.owner,b.object name,a.session id,a.locked mode from v locked object a,dba objects b where b.object id a.o...