来自Oracle的文档:
ORA-00054 resource busy and acquire with NOWAIT specified
Cause: Resource interested is busy.
Action: Retry if necessary. 在我们的代码中,我们发出一个SELECT FOR UPDATE NOWAIT命令来锁定我们将要更新的行。
现在的逻辑是,如果它返回SQL error 54,那么就假设另一个用户正在尝试更新相同的记录。这个逻辑有效吗?
从Oracle的文档中可以看出,如果DB不堪重负,那么这也可能导致抛出此错误。
当我们只使用上面的SQL命令时,出现这个错误的可能原因是什么?
发布于 2012-04-27 21:10:39
SELECT ...FOR UPDATE尝试获取表上的RS (行共享)锁和行上的X (eXclusive)锁。如果另一个会话在表上有排他锁(例如创建索引)或在行上有排他锁(update、delete或select for update),那么查询将等待另一个事务释放锁(通常是commit或rollback ),除非您指定了NOWAIT。
因此,一种可能是不指定NOWAIT。
我没有意识到数据库可能因为“不堪重负”而抛出这个错误的情况。
https://stackoverflow.com/questions/10350821
复制相似问题