解决ORA-00054资源正忙的问题

Posted eos666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决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;

以上是关于解决ORA-00054资源正忙的问题的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 报 ORA-00054资源正忙的解决办法

oracle报错 ORA-00054 资源正忙

ora-00054: 资源正忙, 但指定以 nowait 方式获取资源如何解决

Oracle 提示:ORA-00054: 资源正忙,要求指定 NOWAIT

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

使用plsql修改数据,报ORA-00054:资源正忙,但指定以NOWAIT方式获取资源,或者超时失效