我有两个数据库实例位于两个服务器中。我想创建一个应用程序,将数据插入第一个,然后更新第二个实例上的数据,如果其中一个进程失败,那么我想回滚所有操作。
数据库服务器不启用DTC / MSDTC。我厌倦了使用交易范围,但没有运气。你们有什么想法我怎么能这样做?
答案 0 :(得分:2)
如果其中一个进程失败,那么我想回滚所有操作
您正在描述分布式事务。要使用分布式事务,您需要一个事务协调器。你can't have the cake and eat it too。
如果您考虑异步应用更改,则有其他选择,即。 Replication。这将删除分布式事务要求,但在第一台服务器上提交更改后,更改将异步应用于第二台服务器。
答案 1 :(得分:0)
一种选择是将补偿代码放入您的应用程序中。例如,如果您的应用程序是基于c#的,那么您可以使用try ... catch块。在catch块中,您可以添加补偿代码以“撤消”对第一台服务器上的数据所做的更改。
然而,最好的方法当然是向DBA提出启用DTC的案例