SQL Server 分布式事务处理(MS DTC)初探

SQL Server 分布式事务处理(MS DTC)初探

在联机文档中是这样描述MS DTC的:
Microsoft 分布式事务处理协调器 (MS DTC) 是一个 事务管理器,它允许客户端应用程序在一个 事务中包含多个不同的数据源。MS DTC 协调在所有已在 事务中登记的服务器间提交 分布式事务
Microsoft® SQL Server™ 安装可通过下列方法参与 分布式事务
1,调用运行 SQL Server 的远程服务器上的存储过程。
2,自动或显式地将本地 事务提升为一个 分布式事务并在该 事务中登记远程服务器。
3, 执行 分布式更新以更新多个 OLE DB 数据源上的数据。如果这些 OLE DB 数据源支持 OLE DB 分布式事务接口,SQL Server 还可以将它们登记在 分布式事务中。 MS DTC 服务协调正确完成 分布式事务,以确保所有服务器上的全部更为永久性的,或在发错误时删除所有更新。
SQL->CREATE TABLE test1 ([id] int ,email varchar(50))
表test1在A服务器中,表email在B服务器中,其表结构和test1一样。在A服务器中运行
SQL->EXEC sp_addlinkedserver 'B','SQL Server'
SQL->GO
SQL->EXEC sp_addlinkedsrvlogin 'B','false','sa','sa','123456'
同样在B服务器中运行以上代码,不同的是服务器名称的变化。
在B服务器中执行如下语句:
SQL->CREATE PROCEDURE dbo.usp_test
SQL->AS
SQL->SELECT id,email FROM email
SQL->GO
这样就把为AB服务器互相添加了Linked Server,并在AB服务器中启动MSDTC服务。在A服务器中运行如下语句:
SQL->BEGIN TRANSACTION Ta
SQL->INSERT INTO test (id,email)
SQL->EXEC a.test.dbo.usp_test
SQL->COMMIT TRANSACTION Ta
运行出错,错误如下:
服务器: 消息 7391,级别 16,状态 1,行 1
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。 [OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ] OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
估计是MSDTC的相关配置有问题。检查MSDTC配置。似乎都满足先制条件。苦思,终不得解,去网上找相关资料。终于不负有心人,找到了解决方法。继续……
组件服务--> a.展开"组件服务"树,然后展开"我的电脑"。b.右键单击"我的电脑",然后选择"属性"。C.在 MSDTC 选项卡中‘安全配置’按钮,确保选中了下列选项:网络 DTC 访问。网络事务 XA 事务 d.另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。e单击"确定",重新启动MSDTC。

再次运行以上语句,结果成功。

来源:http://www.verydemo.com/demo_c155_i14634.html

你可能感兴趣的:(SQL Server 分布式事务处理(MS DTC)初探)