0

我有两个数据库实例位于两台服务器中。我想创建一个应用程序将数据插入第一个实例,然后在第二个实例上更新数据,如果其中一个进程失败,那么我想回滚所有操作。

数据库服务器不启用 DTC/MSDTC。我厌倦了使用事务范围,但没有运气。你们知道我该怎么做吗?

4

2 回答 2

2

如果这些过程之一失败,那么我想回滚所有操作

您正在描述分布式事务。要使用分布式事务,您需要一个事务协调器。你不能一边吃蛋糕一边吃

如果您考虑更改的异步应用,还有其他选择,即。复制。这消除了分布式事务的要求,但是在将更改提交到第一台服务器之后,这些更改将异步应用到第二台服务器。

于 2012-09-24T10:40:46.840 回答
0

一种选择是将补偿代码放入您的应用程序中。例如,如果您的应用程序是基于 c# 的,您可以有一个 try...catch 块。在 catch 块中,您可以添加补偿代码以“撤消”您对第一台服务器上的数据所做的更改。

然而,最好的方法当然是向 DBA 提出启用 DTC 的案例

于 2012-09-24T12:08:33.417 回答