解決ORA-00054資源正忙的問題


有時候在drop表或者其他對象的時候,會遇到ORA-00054:資源正忙,要求指定NOWAIT(中文字符集)或者ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired錯誤(英文字符集),Oracle官方解決方案:

ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

Cause: Interested resource is busy.

Action: Retry if necessary or increase timeout.

通常處理方法有好幾個步驟:

  • 查看數據庫中那些用戶產生了鎖
SQL> select username,sid,serial#,logon_time from v$locked_object,v$session where v$locked_object.session_id=v$session.sid;
USERNAME                              SID    SERIAL# LOGON_TIME
------------------------------ ---------- ---------- -----------
NEWCCS                               228        574 2010-7-6 17
  • 根據SID查看具體的SQL語句
SQL> select sql_text from v$session,v$sqltext_with_newlines where decode(v$session.sql_hash_value,0,prev_hash_value,sql_hash_value)=v$sqltext_with_newlines.hash_value and v$session.sid=&sid order by piece;
  • 如果短時間內此SQL語句無法完成,且急需重建索引,那么kill此session
SQL> alter system kill session '228,574';

以上步驟太過繁瑣,這里有一段代碼的解決方案:

BEGIN
FOR C IN (SELECT S.SID SID, S.SERIAL# SERIAL FROM V$LOCKED_OBJECT L, V$SESSION S WHERE L.SESSION_ID = S.SID) LOOP
   EXECUTE IMMEDIATE ('ALTER SYSTEM KILL SESSION ''' || C.SID || ',' || C.SERIAL || '''');
END LOOP;
END;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM