该操作未能执行,因为 OLE DB 提供程序SQLOLEDB无法启动分布式事务
分布式事务,我的情况是两台win2003+sql2005的服务器,在事务中使用链接服务器,提示:“ 'SQLOLEDB ' 无法启动分布式事务”
按照zjcxc(邹建)的解决方案做了(http://topic.csdn.net/t/20040608/12/3073266.html):
一.不使用事务用select分布式查询,没有问题
使用事务用select分布式查询,也没有问题
使用事务用insert往链接服务器中插入记录,就出现“ 'SQLOLEDB ' 无法启动分布式事务”错误。
二.两台机的MSDTC是否都打开了. --错误依然
三.两台MSDTC都按照上述说明就行设置了。--错误依然
四.两台服务器都启动着RPC服务,135端口也都开着。--错误依然
五.把连接服务器改成MSDASQL方式的连接。--错误依然
七.两台服务器不在同一个域,在msdtc的安全设置中都设置了“不需要进行验证”。--错误依然
后面的几项,因为我是win2003+sql2005,系统够更新的。
最后,--错误还是依然。
我晕。。。。。。。。。。
[解决办法]
参考:
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 oftware\Microsoft\MSDTC。
添加一个 DWORD 值 TurnOffRpcSecurity,值数据为 1。
2、重启MS DTC服务。
3、打开“管理工具”的“组件服务”。
a. 浏览至 "启动管理工具 "。 b. 选择 "组件服务 "。 c. 展开 "组件服务 "树,然后展开 "我的电脑 "。
d. 右键单击 "我的电脑 ",然后选择 "属性 "。
在 MSDTC 选项卡中,确保选中了下列选项:网络 DTC 访问 网络管理 网络事务XA 事务
另外, "DTC 登录帐户 "一定要设置为 "NT Authority\NetworkService "。
4、重启MS DTC服务。
5、再次运行 regedt32,浏览至 HKEY_LOCAL_MACHINE oftware\Microsoft\MSDTC,然后删除 TurnOffRpcSecurity 项。
但是实际上该方法基本上解决不了问题,经过长时间的反复实践,我终于按下面的方法解决了:
(方法二)
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.
# www.knowsky.com
# 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文件都修改好
[解决办法]
类似的问题我也遇到了,错误一样,一直没有解决.
后来就用了数据同步来搞了,发布订阅
[解决办法]
我曾经尝试过,未果!:(
[解决办法]
不用事务能成功吗?
比如直接:
select * from test.master..sysobjects
[解决办法]
不用事务都可以成功。
以前类似的帖子,最终都没有发现有成功的。
------解决方案--------------------
sqlserver2000我成功过,也失败过,但没找出原因 :(
[解决办法]
同意 gc_ding(施主,给个妞泡好么)
本地事务和远程事务操作之间的鸿沟就是tcpip和netbios之间的联系
就是改host后,并在执行事务的登陆帐号上用远程sqlserver的实例名连接,实例名最好和机器名一样
[解决办法]
如果读远程数据那么不会错,写就不行了
那么执行
set ansi_nulls on
go
set ansi_warnings on
insert into server_Pqs.dbname_Pqs.dbo.tablename values( .......)就可以了