更新两个数据库时如何保证事务管理

Posted

技术标签:

【中文标题】更新两个数据库时如何保证事务管理【英文标题】:How to ensure transaction management when updating two database 【发布时间】:2015-01-18 03:04:02 【问题描述】:

当连接两个不同的数据库(一个是mysql,另一个是oracle)时,如何确保两个数据库中的事务都成功或不成功。

更多信息..

我有一个事务,我将更新两个不同的数据库。因此我有两个不同的服务和两个不同的 DAO。我怎样才能确保交易在数据库中成功或没有..

谢谢 车坦

【问题讨论】:

你需要使用分布式事务。这通常由应用程序服务器管理,但您可以使用XADataSources 自己完成,但这会增加一些复杂性。 【参考方案1】:

这称为“两阶段提交”。您需要两个数据库的 JTA 事务管理器和 XA JDBC 驱动程序才能使其工作。

您问题中的问题在于“服务”一词:如果将两个 DAO 封装为单独的 Web 服务,那么 JTA 将无法工作。然后调用这两个服务的对象将不得不管理一切。您必须创建补偿事务,跟踪每次调用的成功或失败,并做出相应的反应。

【讨论】:

以上是关于更新两个数据库时如何保证事务管理的主要内容,如果未能解决你的问题,请参考以下文章

如何保证多线程从mysql数据库查询的数据不重复

高并发情况下,创建和更新时,如何保证数据准确

高并发情况下,创建和更新时,如何保证数据准确

高并发情况下,创建和更新时,如何保证数据准确

一个action操作两个service,其中一个报错,如何保证事务的一致性?

如何实现插入数据时自动更新另外一个表的内容