gpt4 book ai didi

sql - 选择更新等待是否会永久锁定行?

转载 作者:行者123 更新时间:2023-12-02 03:21:06 25 4
gpt4 key购买 nike

我有两个进程访问同一个表。他们每个人都运行一个选择更新查询并设置 WAIT 值。

我的问题是:如果进程一运行查询并锁定表中的 n 行,如果进程一在提交之前崩溃,如何释放行?

我试图在 sql developer 中打开两个 session 并在第一个 session 中运行选择更新,然后关闭它。在第二个 session 中运行相同的查询,发现行仍然被锁定!

最佳答案

只要事务持续*,事务持有的锁就会持续。释放它们的唯一方法是结束事务。

“崩溃”的确切含义是什么?在三层应用程序中,当前端出现故障时,中间层通常通过关闭逻辑 session 进行清理,逻辑 session 会关闭任何关联的事务。在客户端-服务器应用程序中,如果锁的持有者没有正常关闭,Oracle 可能不会立即意识到。 DBA 通常会配置死连接检测,以定期向客户端发送 ping 以验证它们是否仍处于事件状态,以便数据库可以在几分钟后识别出死连接存在并将其回滚。如果数据库未配置为检测问题并且客户端/服务器应用程序未关闭事务,则您可能需要等待一段时间。可能存在限制 session 连接时间的配置文件或在一段时间后终止 session 的 DBA 脚本,或者您可能必须调用 DBA 并要求他们终止另一个 session 。
*为了学究,您可以通过 dbms_lock 获取用户定义的锁。为 session 而不是事务持久化。但这超出了这个问题的范围。

关于sql - 选择更新等待是否会永久锁定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33373352/

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