我需要使用一些简单的SQL语句更新多个数据库。使用“链接服务器”在SQL中配置数据库,并混合使用SQL版本(SQL 2008,SQL 2005和SQL 2000)。我打算在其中一个数据库中编写存储过程,但我想使用事务来确保每个数据库一致地更新。
以下哪项最准确:
请注意,我不关心任何类型的跨数据库参照完整性;我只是尝试从单个存储过程同时更新多个数据库。
欢迎任何其他建议。谢谢!
答案 0 :(得分:4)
有可能。您可以在控制过程中使用显式BEGIN DISTRIBUTED TRANSACTION
,或者只是启动正常事务并依靠DTC在您通过链接服务器时将事务提升为分布式事务,这会自动发生。请参阅MSDN中的Transact-SQL Distributed Transactions。
但是我必须警告你,这是一个滑坡。一旦将DQ(分布式查询)带入图片中,故障数量和停机时间就会急剧增加。如果您有99.5%的正常运行时间服务器(即每年43小时的停机时间),并且您的查询涉及5台服务器,则您的可用性变为97.5%(每年216小时的停机时间)。使用10台服务器,它可以达到95%的正常运行时间(停机时间为428小时)。管理操作系统补丁部署,引擎SP升级或应用程序维护(想想索引重建等)等事情成为协调和协调的噩梦。
要做的就是解耦服务器,使用Service Broker而不是DQ。
答案 1 :(得分:1)
您应该能够使用分布式事务完成#1。您需要激活DTC,并且您需要在存储过程中使用BEGIN DISTRIBUTED TRANSACTION以及ROLLBACK TRANSACTION和COMMIT TRANSACTION。
处理DTC可以解决很多问题,祝你好运:)