0

来自 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 命令时,这个错误的可能原因是什么?

4

1 回答 1

2

SELECT ... FOR UPDATE 尝试获取表上的 RS(行共享)锁和行上的 X(排他性)锁。如果另一个会话在表上具有排他锁(例如创建索引)或在行上具有排他锁(更新、删除或选择更新),则查询将等待另一个事务释放锁(提交或回滚)一般),除非您已指定现在。

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

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

于 2012-04-27T13:10:38.603 回答