该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。

gahade 2006-12-14 05:51:09
在服务器A上创建了链接服务器B
select * from b.数据库.dbo.a 可以执行
insert into a
select '111' 也可以执行

将insert into a
select '111'放在触发器中,或
begin tran
insert into a
select '111'
commit 就报错

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

MSDTC服务已经启动,但还是不行.
我要在A服务器或B服务器上设置什么才能行呢?

请教高手急盼解答,分不够再加!
...全文
1189 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gahade 2006-12-15
  • 打赏
  • 举报
回复
感谢各位的帮助,这个问题现在已经解决了,但是是通过其它的方式.
本来我以为是服务器的问题,但今天我换了台客户端再插入和昨天另外那台客户端的提示不一样,提示要设置xact_abort为设为ON,我设成ON时就可以了.
真是奇怪,两台一样的版本的客户端会有不同的结果,找不到原因.
caixia615 2006-12-15
  • 打赏
  • 举报
回复
学习
jackeyabc 2006-12-15
  • 打赏
  • 举报
回复
学习
marco08 2006-12-14
  • 打赏
  • 举报
回复
学习
j9988 2006-12-14
  • 打赏
  • 举报
回复
定义链接服务器时把SQLOLEDB改成MDASQL试试

'SQLOLEDB',
'Data Source=IP;User ID=MyUID;Password=MyPass'

改成:

'MSDASQL',
'DRIVER={SQL Server};SERVER=IP;UID=sa;PWD=MyPass',
fellowcheng 2006-12-14
  • 打赏
  • 举报
回复
学习
gahade 2006-12-14
  • 打赏
  • 举报
回复
多谢各位的回复.
明天去办公室试试
gc_ding 2006-12-14
  • 打赏
  • 举报
回复
沙果老兄,还有一招:
在两台服务器上的HOSTS文件(C:\WINDOWS\system32\drivers\etc)
中加入对方服务器的IP和主机名
形如:
127.0.0.1 localhost
192.168.1.2 中心
192.168.1.3 西站
192.168.106.35 信息中心2

原因好象是分布式事务回转时按主机名找
gc_ding 2006-12-14
  • 打赏
  • 举报
回复
一.A.不用事务,单用SELECT 语句.是否可以分布式查询?

B.LINKSERVER 在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务)

C.DBCC TRACEON (3604, 7300)--用跟踪看更详细错误信息.

D.下载MS提供的DTCPing.exe 分装在两台机上,按README说明来运行它.看出错信息.
http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe

二.两台机的MSDTC是否都打开了.

三.MSDTC设置是否正确.

1.打开命令提示,运行"net stop msdtc",然后运行"net start msdtc"。
2.转至"组件服务管理工具"。
3.浏览至"启动管理工具"。
4.选择"组件服务"。
a.展开"组件服务"树,然后展开"我的电脑"。
b.右键单击"我的电脑",然后选择"属性"。
C.在 MSDTC 选项卡中,确保选中了下列选项: 网络 DTC 访问
网络管理
网络事务
XA 事务
e.另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。
5.单击"确定"。这样将会提示您"MS DTC 将会停止并重新启动。
所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。
6.单击"确定"关闭"我的电脑"属性窗口。

四.
MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙.
telnet IP 135
如果是关闭的打开它.

五.
有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为"MSDASQL" 的ODBC方式联接.
使用RRAS而不是RAS.(控制面版--管理工具--远程服务管理器)
Check whether you are using Remote Access Server (RAS) to access remote servers. If so, make sure that you have implemented Routing RAS (RRAS). Linked server does not work on RAS because RAS allows only one way communication.

七.检查你的两台服务器是否在同一个域中.
如果不在同一个域中,是否建立可信任联接.

八.如果是WIN2000,升级到SP4

九.升级MDAC到2.6以上,最好是2.8.

十.要安装SQL的最新补丁
点点星灯 2006-12-14
  • 打赏
  • 举报
回复
这种情况我遇到过,但没找到在SQL中的解决的办法,
我是把它在程序中分开了,建立了两个连接来解决的.

34,597

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧