日期:2014-05-17  浏览次数:20471 次

超级郁闷的问题:该操作未能执行,因为 OLE DB 提供程序 'sqloledb' 无法启动分布式事务。
平台SQLSERVER2000 sp4+windows2003sp2
网上的方法:http://blog.csdn.net/fa_ge/archive/2010/08/20/5827125.aspx,测试了不好使。

当前防火墙关闭,msdtc都设置过,并且启动正常。

查询分析器执行。

drop table #
SELECT * INTO # FROM openrowset('sqloledb','127.0.0.1';'sa';'1234','SELECT * FROM JYCV13.dbo.test3')

上面的可以正常执行,但是下面的就报错了。

drop table #
BEGIN TRAN

SELECT * INTO # FROM openrowset('sqloledb','127.0.0.1';'sa';'1234','SELECT * FROM JYCV13.dbo.test3')

COMMIT TRAN


服务器: 消息 7391,级别 16,状态 1,行 4
该操作未能执行,因为 OLE DB 提供程序 'sqloledb' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'sqloledb' ITransactionJoin::JoinTransaction returned 0x8004d00a]。

网上试过N多方法,都不行。有哪位高手能解决一下,万分感谢!!!

------解决方案--------------------
试试

SET XACT_ABORT ON 
BEGIN DISTRIBUTED  TRAN 
XXX
commit
------解决方案--------------------
http://support.microsoft.com/kb/839279
------解决方案--------------------
 
如果禁用了分布式事务协调器 (DTS) 服务,或者如果网络 DTC 访问被禁用,会出现这种情况。
默认状态下,网络 DTC 访问被禁用 Windows Server 2003 中。

要变通解决此问题,安装在两台服务器上的网络 DTC 访问: 
1.单击 开始,然后单击 控制面板。
2.单击 添加或删除程序,然后单击 添加/删除 Windows 组件。
3.在 组件 框中单击 应用程序服务器,然后单击 详细信息。
4.单击以选中 启用网络 DTC 访问 复选框,然后单击 确定。
5.单击 下一步,然后按照以完成安装过程屏幕上显示的说明进行操作。
6.停止并重新启动分布式事务处理协调器服务。
7.停止并重新加入任何资源管理器服务启动分布式事务 (如 Microsoft SQL Server 或 Microsoft
  消息队列服务器) 中。

------解决方案--------------------
在两台机器上测试 不要同一台机器上
------解决方案--------------------
或者试试建立链接服务器,为啥你还要加个事务???
------解决方案--------------------
http://topic.csdn.net/t/20061214/17/5231336.html
http://www.cnblogs.com/long2006sky/archive/2010/11/08/1872188.html
------解决方案--------------------
把dts设成不需要身份验证就可以了
------解决方案--------------------
刚刚试了一下 给你参考一下
同一台机器
SQL2000 实例连接SQL2005实例成功
SQL2005 实例链接SQL2000实例成功
------解决方案--------------------
继续
SQL2000连接SQL2000 失败(不管用netbios名还是ip)
SQL2005连接SQL2005 失败(不管用netbios名还是ip)