1. 分布式事务的定义和说明<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
实际上跨越两个或多个数据库的单个 SQL Server 中的事务就是分布式事务。但是,SQL Server 对分布式事务进行内部管理;对于用户而言,其操作就像本地事务一样。对于应用程序,管理分布式事务很像管理本地事务。事务结束时,应用程序请求提交或回滚事务。不同的是,分布式提交必须由事务管理器管理,以尽量避免出现因网络故障而导致一个事务由某些资源管理器成功提交,但由另一些资源管理器回滚的情况。通过分两个阶段(准备阶段和提交阶段)管理提交进程可避免这种情况,这称为两阶段提交 (2PC)。
准备阶段
当事务管理器收到提交请求时,它给该事务所涉及的所有资源管理器发送一个准备命令。然后,每个资源管理器将尽力使该事务持久,并且所有保存该事务日志映象的缓冲区将被刷新到磁盘中。当每个资源管理器完成准备阶段时,它会向事务管理器返回准备成功或准备失败的消息。
提交阶段
如果事务管理器收到所有资源管理器发来的准备成功消息,它将给每个资源管理器发送提交命令。然后资源管理器就可以完成提交。如果所有资源管理器都报告提交成功,那么事务管理器则向应用程序发送一个成功提示。如果有资源管理器报告准备失败,那么事务管理器将给每个资源管理器发送一个回滚命令,并向应用程序表示提交失败。
SQL Server 应用程序可以通过 Transact-SQL 或数据库 API 管理分布式事务。
2. 分布式事务正常启动的前提条件
l 双方启动MSDTC服务
MSDTC是Microsoft Distributed Transaction Coordinator的简称,即微软分布式事务协调器,描述:协调跨多个数据库、消息队列、文件系统等资源管理器的事务。MSDTC服务提供分布式事务服务,假如要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC服务。MSDTC服务可以在SQL SERVER服务管理器上进行启动设置。请见下面截图。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
l 确保双方打开135端口
MSDTC服务依靠于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,假如服务器有防火墙,保证135端口不被防火墙挡住。禁用双方windows防火墙或者在双方防火墙中增加对MSDTC.exe例外
l 对MSDTC组件进行正确设置
1.控制面板->管理工具->组件服务->计算机->我的电脑->右键->属性
2. 选择MSDTC页, 确认"使用本地协调器"
3.点击下方"安全配置"按钮
4. 勾选: "允许网络DTC访问","允许远程客户端","允许远程管理","允许入站","允许出站","不要求进行身份验证".
5. DTC 登录帐户一定要设置为“NT Authority\NetworkService”
3. 在TSQL中使用分布式事务的例子
--当发生运行错误时,自动回滚当前事务
SET XACT_ABORT ON
--显式启动分布式事务
BEGIN DISTRIBUTED TRAN
--本地操作语句
UPDATE / DELETE / INSERT ......
--调用远程存储过程
EXEC 链接服务器名.数据库名.dbo.远程存储过程
COMMIT TRAN
SET XACT_ABORT OFF
4. .Net中使用COM+服务来支持自动事务
using System.Transactions;
using( TransactionScope scope = new TransactionScope())
{
/* 分布式操作语句 */
SomeMethod1();
SomeMethod2();
……;
scope.Complete();
}
但是实际上该方法基本上解决不了问题,经过长时间的反复实践,我终于按下面的方法解决了:
(方法二)
1、按照方法一的方法处理一遍,如果不行,再继续下面的方法
2、安装windows 2003 sp1,安装好后,方法一中的第4步设置对话框和原来不一样了,选择“事务管理通讯”中的“不要求验证”
3、最好安装好MDAC2.8
3、通过查找,在C:找到名为“hosts”的文件(没有扩展名),通常路径为C:\WINDOWS\system32\drivers\etc,将对方服务器的IP和计算机对应起来,参考如下:
==========================================================================================
# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
127.0.0.1 localhost
192.168.1.2 中心
192.168.1.3 西站
192.168.106.35 信息中心2
==============================================================================================
一定要将每台服务器的hosts文件都修改好
通过以上办法,我的分布式就可以正常运行了,速度也非常快