是否可以在没有启用DTC的情况下在两个实例之间使用事务?

时间:2012-09-24 09:56:38

标签: sql-server msdtc

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

数据库服务器不启用DTC / MSDTC。我厌倦了使用交易范围,但没有运气。你们有什么想法我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

  

如果其中一个进程失败,那么我想回滚所有操作

您正在描述分布式事务。要使用分布式事务,您需要一个事务协调器。你can't have the cake and eat it too

如果您考虑异步应用更改,则有其他选择,即。 Replication。这将删除分布式事务要求,但在第一台服务器上提交更改后,更改将异步应用于第二台服务器。

答案 1 :(得分:0)

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

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