gpt4 book ai didi

oracle - 如何在Oracle中查找锁定的行

转载 作者:行者123 更新时间:2023-12-03 14:43:56 25 4
gpt4 key购买 nike

我们有一个Oracle数据库,客户帐户表大约有一百万行。多年来,我们已经构建了四个不同的UI(两个在Oracle Forms中,两个在.Net中),所有这些UI仍在使用中。我们还有许多后台任务(持久性和计划性)。

有时某个帐户表上的行上有一个长锁(例如,超过30秒),这会导致持久性后台任务之一失败。更新超时后,有问题的后台任务将自行重启。发生几分钟后,我们就找到了它,但是到那时锁已被释放。

我们有理由相信这可能是行为不当的用户界面,但尚未能够找到“吸烟枪”。

我找到了一些列出了阻止的查询,但是那是当您有两个要争的工作。我想知道当不一定有第二份工作试图获得锁时哪些行具有锁。

我们使用的是11g,但是自8i以来一直在遇到问题。

最佳答案

Oracle的锁定概念与其他系统完全不同。

Oracle中的行被锁定时,记录本身将使用新值(如果有的话)进行更新,此外,还将一个锁(本质上是驻留在回滚段中的事务锁的指针)放入记录。

这意味着将记录锁定在Oracle中意味着更新记录的元数据并发布逻辑页写入。例如,您不能在只读表空间上执行SELECT FOR UPDATE

更重要的是,提交后记录本身不会更新:相反,回滚段会更新。

这意味着每个记录都包含有关最后更新它的事务的一些信息,即使事务本身早已死亡也是如此。为了查明事务是否有效(因此记录是否有效),需要访问回滚段。

Oracle没有传统的锁管理器,这意味着要获取所有锁的列表,需要扫描所有对象中的所有记录。这将花费太长时间。

您可以获得一些特殊的锁定,例如锁定的元数据对象(使用v$locked_object),锁定等待(使用v$session)等,但不能获得数据库中所有对象的所有锁定的列表。

关于oracle - 如何在Oracle中查找锁定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2186848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com