我有两个数据库实例位于两台服务器中。我想创建一个应用程序将数据插入第一个实例,然后在第二个实例上更新数据,如果其中一个进程失败,那么我想回滚所有操作。
数据库服务器不启用 DTC/MSDTC。我厌倦了使用事务范围,但没有运气。你们知道我该怎么做吗?
我有两个数据库实例位于两台服务器中。我想创建一个应用程序将数据插入第一个实例,然后在第二个实例上更新数据,如果其中一个进程失败,那么我想回滚所有操作。
数据库服务器不启用 DTC/MSDTC。我厌倦了使用事务范围,但没有运气。你们知道我该怎么做吗?
如果这些过程之一失败,那么我想回滚所有操作
您正在描述分布式事务。要使用分布式事务,您需要一个事务协调器。你不能一边吃蛋糕一边吃。
如果您考虑更改的异步应用,还有其他选择,即。复制。这消除了分布式事务的要求,但是在将更改提交到第一台服务器之后,这些更改将异步应用到第二台服务器。
一种选择是将补偿代码放入您的应用程序中。例如,如果您的应用程序是基于 c# 的,您可以有一个 try...catch 块。在 catch 块中,您可以添加补偿代码以“撤消”您对第一台服务器上的数据所做的更改。
然而,最好的方法当然是向 DBA 提出启用 DTC 的案例