2

我们正在探索在两个不同 SQL Server 实例之间进行通信的不同方法。所需的工作流程之一是向“远程”端发送某种消息,请求删除记录。当该系统完成删除时,它保持其事务打开并向发起者发送响应,然后发起者删除其相应的记录,提交其事务,然后将消息发送回“远程”端,告诉它,最后,也提交删除。

这是一个穷人对两阶段提交的近似。关于 SQL Server Service Broker 是否能够合理干净地处理这种类型的场景,该部门正在进行一场宗教辩论。任何人都可以阐明它是否可以吗?有类似工作流程的经验吗?考虑到 SQL Server 实例位于单独的非域计算机上,是否有更好的机制来实现这一点?

编辑:澄清一下,我们不能使用分布式事务,因为网络安全性既严密又有些随意。我们不允许进行使这成为可能的配置。

4

2 回答 2

5

除非我误解了要求,否则我会说这是 Service Broker 的完美工作。Service Broker 使您无需使用分布式事务和 2PC。使用 Service Broker 所做的是将问题减少到服务器之间的本地事务和事务消息传递。

在您的特定情况下,其中一台服务器将删除其记录,然后(作为同一事务的一部分)向另一台服务器发送一条消息,请求删除相应的记录。将消息排入队列后,第一个服务器可以提交事务并忘记整个事情,而无需等待与第二个服务器同步。Service Broker 保证一旦提交消息入队,消息将以事务方式传递到目的地,然后目的地可以将其记录作为接收消息的同一事务的一部分删除,从而确保消息处理和数据更改是原子的。

于 2011-05-22T11:14:43.067 回答
1

您是否尝试过使用分布式事务?

它会做你需要的一切,但每台服务器都需要作为链接服务器相互连接。

于 2011-05-17T15:38:37.190 回答