【问题标题】:Oracle Lock , How do they differ?Oracle Lock ,它们有何不同?
【发布时间】:2021-05-28 14:28:58
【问题描述】:
以下两个错误有什么区别。据我了解,它们发生在锁定的情况下。但是你知道可能发生的不同场景吗?
ORA-04021: timeout occurred while waiting to lock object
和
ORA-00054: resource busy and acquire with NOWAIT specified
【问题讨论】:
标签:
oracle
oracle11g
locking
database-locking
【解决方案1】:
ORA-04021 的示例可能是这样的:您的架构中有一个包。它包含一个程序,该程序完成一些需要 15 分钟才能完成的工作。有人运行该程序。同时,您希望修复该包中的某些内容,因此您编辑它的代码并想要编译它。好吧,你不能——它正在被使用,所以你必须等到它被释放。 Oracle 告诉您在您等待锁定包并编译它时发生了超时。
ORA-00054 的示例:有一张桌子。您更新了其中的一些值,但没有提交(也没有回滚),因为您还必须做 其他事情。在另一个会话中,另一个用户想要更改表的一个列(例如,扩大其大小)。然后 ALTER 将引发 0RA-00054,表示该表 busy(您正在另一个会话中更新它,对吗?)所以您必须等到事务提交(或回滚)。 p>