解决windows 2003+Sql2000中OLEDB分布式事务无法启动的解决方案
在开发分布式数据库软件时,经常碰到下面的错误:服务器: 消息 7391,级别 16,状态 1,行 6该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。[OLE/DB provider returned message: 不能在指定的事务处理器中获得新事务。]-----------------------------------------服务器: 消息 8520,级别 20,状态 1,行 8内部 MSDTC 事务的提交失败: Result Code = 0x8004d019。
连接中断-----------------------------------------搜索了网上类似问题的解决方案,都建议采用下面的方法(方法一):1、运行 regedt32,浏览至 HKEY_LOCAL_MACHINE oftwareMicrosoftMSDTC。添加一个 DWORD 值 TurnOffRpcSecurity,值数据为 1。2、重启MS DTC服务。3、打开“管理工具”的“组件服务”。 a. 浏览至'启动管理工具'。;b. 选择'组件服务'。;c. 展开'组件服务'树,然后展开'我的电脑'。;d. 右键单击'我的电脑',然后选择'属性'。;;在 MSDTC 选项卡中,确保选中了下列选项: 网络 DTC 访问 网络管理 网络事务XA 事务另外,'DTC 登录帐户'一定要设置为'NT AuthorityNetworkService'。4、重启MS DTC服务。5、再次运行 regedt32,浏览至 HKEY_LOCAL_MACHINE oftwareMicrosoftMSDTC,然后删除 TurnOffRpcSecurity 项。
但是实际上该方法基本上解决不了问题,经过长时间的反复实践,我终于按下面的方法解决了:(方法二)1、按照方法一的方法处理一遍,如果不行,再继续下面的方法2、安装windows 2003 sp1,安装好后,方法一中的第4步设置对话框和原来不一样了,选择“事务管理通讯”中的“不要求验证”3、最好安装好MDAC2.83、通过查找,在C:找到名为“hosts”的文件(没有扩展名),通常路径为C:WINDOWSsystem32driversetc,将对方服务器的IP和计算机对应起来,参考如下:========================================# Copyright (c) 1993-1999 Microsoft Corp.## This is a sample HOSTS file used by Microsoft TCP/IP for Windows.# www.mypchelp.cn# 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 localhost192.168.1.2 中心192.168.1.3 西站192.168.106.35 信息中心2=============================================一定要将每台服务器的hosts文件都修改好通过以上办法,我的分布式就可以正常运行了,速度也非常快