1. 程式人生 > >解決ORA-00054資源正忙的問題

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

lock out sqlt ssi 官方 use ssa || lec

有時候在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;

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