如果在windows.netserver上安装的sqlserver2000中运行链接服务器查询,可能会返回下列错误(即使msdtc正在该服务器上运行):
症状如果在windows.netserver上安装的sqlserver2000中运行链接服务器查询,可能会返回下列错误(即使msdtc正在该服务器上运行):server:msg8501,level16,state3,line3 msdtconserver"servername"isunavailable.在sqlserver错误日志中,您会发现由运行该查询的spid引发的下列错误:resourcemanagercreationfailed:resultcode=0x8004d01c原因这是设计使然。如果在"本地系统"帐户下运行"分布式事务处理协调器服务"就会发生此错误。解决方案最近为了提高rpc安全性对dtc所做的更改要求msdtc作为"ntauthority\networkservice"运行。这是。netserver的默认选项。在windowsnt和windows2000中,默认情况下msdtc服务是在"本地系统"帐户下运行的。
警告:"注册表编辑器"使用不当可造成严重问题,这些问题可能需要重新安装操作系统。microsoft不保证能够解决因为"注册表编辑器"使用不当而产生的问题。使用"注册表编辑器"需要您自担风险。
若要将msdtc服务帐户从"本地系统"更改为"ntauthority\networkservice",请执行下列步骤:1.运行regedt32,浏览至hkey_local_machine\software\microsoft\msdtc.添加一个dword值turnoffrpcsecurity,值数据为1.2.打开命令提示,运行"netstopmsdtc",然后运行"netstartmsdtc".3.转至"组件服务管理工具".
a.浏览至"启动管理工具".
b.选择"组件服务".
c.展开"组件服务"树,然后展开"我的电脑".
d.右键单击"我的电脑",然后选择"属性".
e.在msdtc选项卡中,确保选中了下列选项:网络dtc访问网络管理网络事务xa事务另外,"dtc登录帐户"一定要设置为"ntauthority\networkservice".
f.单击"确定".这样将会提示您"msdtc将会停止并重新启动。所有的依赖服务将被停止。请按"是"继续".单击"是"继续。
g.单击"确定"关闭"我的电脑"属性窗口。
4.再次运行regedt32,浏览至hkey_local_machine\software\microsoft\msdtc,然后删除turnoffrpcsecurity项。现在您的msdtc服务应该在"ntauthority\networkservice"帐户下运行了,并且不会再出现该错误。
更多信息当"msdtc安全性"配置下的"网络dtc访问"禁用时,如果运行链接服务器查询则会返回下列错误:server:msg7391,level16,state1,line2theoperationcouldnotbeperformedbecausetheoledbprovider"sqloledb"
wasunabletobeginadistributedtransaction.[ole/dbproviderreturnedmessage:newtransactioncannotenlistinthespecifiedtransactioncoordinator.]
跟踪标记7300打开时:server:msg7391,level16,state1,line2theoperationcouldnotbeperformedbecausetheoledbprovider"sqloledb"
wasunabletobeginadistributedtransaction.[ole/dbproviderreturnedmessage:newtransactioncannotenlistinthespecifiedtransactioncoordinator.]oledberrortrace[ole/dbprovider"sqloledb"itransactionjoin::jointransactionreturned0x8004d00a].
msdtc服务一定要按照上面"解决方案"一节中的说明进行设置,才能防止此错误。
再现现象的步骤
1.转至"启动管理工具服务".
2.右键单击"分布式事务处理协调器"服务,转至"登录"选项卡,选择"登录身份"下的"本地系统"帐户。
3.停止然后重新启动该服务。
4.从查询分析器,运行下列脚本:execsp_addlinkedserverremote1execsp_setnetnameremote1,






