gpt4 book ai didi

oracle - 两阶段提交/共享交易

转载 作者:行者123 更新时间:2023-12-03 18:28:27 27 4
gpt4 key购买 nike

场景是这样的
我们有两个应用程序 A 和 B,它们都运行在单独的数据库 (Oracle 9i) 事务中
应用程序 A - 将一些数据插入数据库,然后调用应用程序 B
应用程序 B - 将一些数据插入数据库,与 A 的数据相关(通过外键)。向应用程序 A 返回一个“ID”
应用程序 A - 使用 ID 插入更多数据,包括来自 B 的 ID
现在,因为这些是单独的事务,但都依赖于来自彼此事务的数据,所以我们需要在对每个应用程序的调用之间进行提交。如果出现任何问题,这当然会使回滚变得非常困难。
您将如何解决这个问题,同时对代码进行最少的重构。当然,这种这种情况是 SOA 世界中的常见问题吗?
- - - 更新 - - - -
我在 Oracle 9i 中找不到任何东西,但是 Oracle 11g 提供了 DBMS_XA ,这正是我所追求的。

最佳答案

您有三个选择:

  • 重新设计应用程序,以便您不会有两个不同的进程(都具有数据库连接)写入数据库并将其合并到单个应用程序中。
  • 创建处理 A 和 B 的所有数据库事务的应用程序 C。
  • 滚动您自己的两阶段提交。应用程序 C 充当协调器。 C 向 A 和 B 发出信号,询问他们是否准备好提交。 A 和 B 进行它们的处理,并以“准备好”或“失败”的回复响应 C(注意,如果一个进程挂起或死亡,C 上应该有一个超时以避免无限等待)。如果两者都回复就绪,则 C 告诉他们提交。否则它会发送一个回滚信号。

  • 请注意,如果应用程序 A 依赖于应用程序 B 的外键(您没有说明,因此这可能不是问题),您可能会遇到选项 3 的问题。 Oracle 的读取一致性可能会阻止这被允许,因为应用程序 A 的事务将在应用程序 B 之前开始。只是一个警告。

    关于oracle - 两阶段提交/共享交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/89320/

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