今天早上剛剛到公司,就接到使用者的**,說是sql語句被阻塞的問題,趕緊看了一下報錯資訊:ora-00054
當某個資料庫使用者在資料庫中插入、更新、刪除乙個表的資料(包括truncate),或者增加乙個表的主鍵時或者表的索引時,常常會出現ora-00054:resource busy and acquire with nowait specified這樣的錯誤。
ora-00054: 資源正忙, 但指定以 nowait 方式獲取資源, 或者超時失效
主要是因為有事務正在執行(或者事務已經被鎖),所有導致執行不成功。
1、檢視資料庫內產生了哪些鎖
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
如:
username sidserial# logon_time
lurou 851 24183 2013/7/30 11:44:45
知道被鎖的使用者lurou,sid為851,serial#為24183
2、根據sid檢視具體的sql語句
select sql_text from v$session a,v$sqltext_with_newlines b
where decode(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
and a.sid=&sid order by piece;
查出來的sql,如:
sql_text
truncate table wl_el_yclx
3、kill該事務
根據業務實際情況,如果sql不重要,可以kill。否則跟現在執行任務但是被阻塞的人說清楚原因就行了,「aaa在執行***任務,你的任務優先順序序列排在aaa的後面,他的任務跑完了,你就可以執行了,稍等一會。或者你去找aaa,讓他停止任務,讓你的先執行」
kill的語法如下:
alter system kill session '339,13545';
ORA 00054 資源正忙 鎖表的解決方法
ora 00054 資源正忙,但指定以 nowait 方式獲取資源,或者超時失效 發生異常 原因 其他session已經對目標表做了操作,且未提交操作,導致鎖表,新的session無法再對錶進行ddl操作。plan a 等待原session執行完對表的操作,或commit對錶的操作。plan b 關...
ORA 00054 資源正忙 鎖表的解決方法
ora 00054 資源正忙,但指定以 nowait 方式獲取資源,或者超時失效 發生異常 原因 其他session已經對目標表做了操作,且未提交操作,導致鎖表,新的session無法再對錶進行ddl操作。plan a 等待原session執行完對表的操作,或commit對錶的操作。plan b 關...
ORA 00054 的解決方法
建立 local index 出現 ora 00054 的錯誤,處理方法如下 現現這個問題的原因是正在執行的操作請求的資源正被其他事務鎖定。1 檢查v locked object,要麼等事務結束後再做,要麼殺掉持有鎖的會話 如果不是關鍵會話 select from v locked object 2...