为什么我得到这个数据库错误时,我更新表?

第1行错误: ORA-00054:资源繁忙,指定NOWAIT或超时获取


当前回答

您的问题看起来像是混合了DML和DDL操作。请看这个URL,它解释了这个问题:

http://www.orafaq.com/forum/t/54714/2/

其他回答

我有这个错误发生时,我有2个脚本,我正在运行。我有:

SQL*Plus会话直接使用模式用户帐户(帐户#1)连接 另一个SQL*Plus会话使用不同的模式用户帐户(帐户#2)连接,但作为第一个帐户跨数据库链接连接

我运行了一个表删除,然后创建表作为帐户#1。 我对账号2的会话进行了表更新。没有提交更改。 以帐户#1的身份重新运行表删除/创建脚本。删除表x命令出错。

我通过运行COMMIT来解决这个问题;在账号#2的SQL*Plus会话中。

我也面临着类似的问题。程序员不需要做任何事情来解决这个错误。我通知了我的oracle DBA团队。他们扼杀了会议,并像一个魅力。

当资源繁忙时发生此错误。检查查询中是否有任何引用约束。甚至您在查询中提到的表也可能处于繁忙状态。他们可能正在从事其他工作,这些工作肯定会在以下查询结果中列出:

SELECT * FROM V$SESSION WHERE STATUS = 'ACTIVE'

找到SID,

SELECT * FROM V$OPEN_CURSOR WHERE SID = --the id

您的问题看起来像是混合了DML和DDL操作。请看这个URL,它解释了这个问题:

http://www.orafaq.com/forum/t/54714/2/

请关闭Oracle会话

使用下面的查询来检查活动会话信息

SELECT
    O.OBJECT_NAME,
    S.SID,
    S.SERIAL#,
    P.SPID,
    S.PROGRAM,
    SQ.SQL_FULLTEXT,
    S.LOGON_TIME
FROM
    V$LOCKED_OBJECT L,
    DBA_OBJECTS O,
    V$SESSION S,
    V$PROCESS P,
    V$SQL SQ
WHERE
    L.OBJECT_ID = O.OBJECT_ID
    AND L.SESSION_ID = S.SID
    AND S.PADDR = P.ADDR
    AND S.SQL_ADDRESS = SQ.ADDRESS;

杀死像

alter system kill session 'SID,SERIAL#';

(例如,alter system kill session '13,36543';)

参考 http://abeytom.blogspot.com/2012/08/finding-and-fixing-ora-00054-resource.html