ORA-00054错误的原因是什么?

时间:2012-04-27 12:43:16

标签: oracle oracle11g ora-00054

来自Oracle的文档: -

ORA-00054 resource busy and acquire with NOWAIT specified   

  Cause: Resource interested is busy.
  Action: Retry if necessary. 

在我们的代码中,我们发出SELECT FOR UPDATE NOWAIT命令来锁定我们即将更新的行。

现在的逻辑是,如果它返回SQL错误54,则假定另一个用户正在尝试更新同一记录。这个逻辑有效吗?

从Oracle的文档中看起来更像是如果数据库不堪重负,那么这也可能导致抛出此错误。

当我们仅使用上述SQL命令时,出现此错误的可能原因是什么?

1 个答案:

答案 0 :(得分:2)

SELECT ... FOR UPDATE尝试获取表上的RS(行共享)锁和行上的X(eXclusive)锁。如果另一个会话对表具有独占锁(例如,创建索引)或对行执行独占锁(更新,删除或选择更新),则查询将等待另一个事务释放锁(提交或回滚)通常)除非你指定了NOWAIT。

所以有一种可能性就是不指定NOWAIT。

我不认识数据库由于“不堪重负”而可能引发此错误的情况。

相关问题