解決ORA-00054資源正忙的問題
阿新 • • 發佈:2019-03-22
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資源正忙的問題