SQL Server Service Broker - 处理SQL Server实例之间的两阶段提交的建议

时间:2011-05-17 15:28:49

标签: sql-server sql-server-2008 transactions service-broker

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

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

编辑:为了澄清,我们不能使用分布式事务,因为网络安全性既紧张又有些武断。我们不允许进行可能的配置。

2 个答案:

答案 0 :(得分:5)

除非我误解了这些要求,否则我认为这对Service Broker来说是一个完美的工作。 Service Broker使您免于使用分布式事务和2PC的需要。您使用Service Broker做的事情是将问题减少到服务器之间的本地事务和事务性消息传递。

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

答案 1 :(得分:1)

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

它将完成您所需的一切,但每台服务器都需要作为链接服务器相互连接。