【发布时间】:2011-04-26 00:12:16
【问题描述】:
有没有一种方法可以测试某行是否已在 Oracle 中锁定以进行更新?
例如,假设以下查询由一位用户执行:
select * from SOME_TABLE where THE_ID = 1000 for update;
对于另一个用户,我想检查带有THE_ID = 1000 的行是否被锁定。如果我尝试更新或其他操作,第二个用户会被阻止并继续等待(不希望这样)。
我还尝试对第二个用户运行以下查询:
select * from SOME_TABLE where THE_ID = 1000 for update NOWAIT;
由于我不能在同一行上放置两个锁,这将失败。它确实如此。我得到一个“ORA-00054:资源繁忙并以 NOWAIT 指定错误获取”。我是否可以始终依靠此错误来检查锁的存在,或者是否有更简单、更简洁的方法来确定行是否被锁定?
谢谢!
【问题讨论】:
-
您应该收到此错误“ORA-00054: 资源繁忙并使用 NOWAIT 指定获取” - 您确定您的用户可以看到该表吗?
-
@SeriousCallersOnly:谢谢,我确实遇到了“ORA-00054:资源繁忙,并以 NOWAIT 指定错误获取”。 ORA-00942 是由我的应用程序的另一层抛出的。对于那个很抱歉。我将编辑问题。