- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个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/
我是一名优秀的程序员,十分优秀!