【问题标题】:Avoiding distributed transaction with db link避免使用数据库链接的分布式事务
【发布时间】:2012-12-27 09:58:26
【问题描述】:

我在一个 Spring Java EE 应用程序中工作,该应用程序必须处理两个不同的数据源 A 和 B。

因为应用程序需要以一致的方式更新 A 和 B。如果一次更新失败,则整个过程都会失败,必须进行回滚。

我对如何实现应用程序有两种不同的想法:

  1. 我必须将这两个更新都包含在分布式事务 XA 中。这种方法在性能方面会很昂贵。此外,B 源将很快关闭,保留整个 XA 基础设施可能是一个瓶颈;
  2. 我可以设置从 db A 到 db B 的 Oracle DB 链接,并让我的应用程序相信它只使用单个数据源和本地事务,而 Oracle 处理更新同步。当 B 将被关闭时,我将简单地删除 B 更新并关闭 DB Link。

你对这两种情况有什么看法?

【问题讨论】:

  • 我不太明白第 2 点,您仍然需要更新两个数据库上的两个表。但是,这确实意味着您可能愿意考虑选项 3,materialized view。如果 B 稍微落后也没关系,您可以只更新 A 并在 B 上通过 DB 链接从 A 中提取数据的物化视图...
  • @Ben 我对 dblink 的理解是,它们为您提供了一种访问本地远程表的方法,不是吗?所以我猜我可以在不考虑分布式 TX 问题的情况下更新我的远程表,但我可能错了......
  • 有点,是的,但这不像您正在使用单个数据源。如果您必须更新两个数据库上的两个表,它们仍然需要单独更新...

标签: oracle spring transactions dblink xa


【解决方案1】:

使用 DB 链接的查询将在 Oracle 中隐式启动分布式事务。因此,您获得的开销与处理 XA 和应用程序中的两个数据源相同。

我们一直在使用 XA,它从来都不是瓶颈。别担心。

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2017-05-02
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多