gpt4 book ai didi

java - 阻塞、锁定和隔离级别之间的关系是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:27 27 4
gpt4 key购买 nike

我了解一些关于 Oracle 阻塞的知识——更新如何阻塞其他更新直到事务完成,写入者如何不阻塞读取者等。

我理解悲观和乐观锁定的概念,以及有关丢失更新等典型银行教科书示例。

我也理解 JDBC 事务隔离级别,例如,我们很高兴看到未提交的数据。

不过,我对这些概念之间的关联和相互作用有点模糊。例如:

  • Oracle 是否提供悲观或默认乐观锁定(它似乎只是阻止了单独的更新基于两个实验TOAD session 。)
  • 如果像我怀疑的那样,这些是应用层概念,为什么会我不厌其烦地实现一个当我可以让数据库同步事务无论如何更新?
  • 当除我的应用程序之外的其他客户端使用不同的隔离级别访问时,事务隔离级别(我在连接上设置)如何改变数据库行为。

如果能澄清这些主题,我们将不胜感激!

最佳答案

  • Oracle 允许任何一种类型的锁定 - 您构建应用程序的方式决定了使用什么。回想起来,这并不是真正的数据库决策。

  • 大多数情况下,Oracle 的锁定足以满足与数据库的有状态连接。在非状态应用程序中,例如网络应用程序,您不能使用它。在这种情况下,您必须使用应用程序级锁定,因为锁定适用于 session 。

  • 通常您无需担心。在 Oracle 中,读者永远不会阻止作者,而作者也永远不会阻止读者。 Oracle 的行为不会随着各种 ANSI 隔离级别而改变。例如,在 Oracle 中没有“脏读”这样的东西。 Tom Kyte 指出允许脏读的精神是为了避免阻塞读,这在 Oracle 中不是问题。

我强烈推荐阅读 Tom Kyte 的优秀书籍“专家 Oracle 数据库架构”,其中非常清楚地解决了这些和其他主题。

关于java - 阻塞、锁定和隔离级别之间的关系是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3426363/

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