数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
windows server 2003 中 SQL Server 2000 分布式事务 错误解决方法

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

症状

如果在 Windows .NET Server 上安装的 SQL Server 2000 中运行链接服务器查询,可能会返回下列错误(即使 MSDTC 正在该服务器上运行):
Server:Msg 8501, Level 16, State 3, Line 3
MSDTC on server 'server name' is unavailable.
在 SQL Server 错误日志中,您会发现由运行该查询的 spid 引发的下列错误:
Resource Manager Creation Failed:Result Code = 0x8004d01c

原因

这是设计使然。如果在"本地系统"帐户下运行"分布式事务处理协调器服务"就会发生此错误。

解决方案

最近为了提高 RPC 安全性对 DTC 所做的更改要求 MSDTC 作为"NT Authority\NetworkService"运行。这是 .NET Server 的默认选项。在 Windows NT 和 Windows 2000 中,默认情况下 MSDTC 服务是在"本地系统"帐户下运行的。

警告:"注册表编辑器"使用不当可造成严重问题,这些问题可能需要重新安装操作系统。Microsoft 不保证能够解决因为"注册表编辑器"使用不当而产生的问题。使用"注册表编辑器"需要您自担风险。

若要将 MSDTC 服务帐户从"本地系统"更改为"NT Authority\NetworkService",请执行下列步骤:
1. 运行 regedt32,浏览至 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC。
添加一个 DWORD 值 TurnOffRpcSecurity,值数据为 1。
2. 打开命令提示,运行"net stop msdtc",然后运行"net start msdtc"。
3. 转至"组件服务管理工具"。

a. 浏览至"启动管理工具"。
b. 选择"组件服务"。
c. 展开"组件服务"树,然后展开"我的电脑"。
d. 右键单击"我的电脑",然后选择"属性"。
e. 在 MSDTC 选项卡中,确保选中了下列选项:
网络 DTC 访问
	网络管理
	网络事务
XA 事务
另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。
f. 单击"确定"。这样将会提示您"MS DTC 将会停止并重新启动。所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。
g. 单击"确定"关闭"我的电脑"属性窗口。
4. 再次运行 regedt32,浏览至 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC,然后删除 TurnOffRpcSecurity 项。
现在您的 MSDTC 服务应该在"NT Authority\NetworkService"帐户下运行了,并且不会再出现该错误。

更多信息


当"MSDTC 安全性"配置下的"网络 DTC 访问"禁用时,如果运行链接服务器查询则会返回下列错误:
Server:Msg 7391, Level 16, State 1, Line 2 The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction.[OLE/DB provider returned message:New transaction cannot enlist in the specified transaction coordinator.]

跟踪标记 7300 打开时:
Server:Msg 7391, Level 16, State 1, Line 2 The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction.[OLE/DB provider returned message:New transaction cannot enlist in the specified transaction coordinator.] OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].
MSDTC 服务一定要按照上面"解决方案"一节中的说明进行设置,才能防止此错误。

再现现象的步骤
1. 转至"启动管理工具服务"。
2. 右键单击"分布式事务处理协调器"服务,转至"登录"选项卡,选择"登录身份"下的"本地系统"帐户。
3. 停止然后重新启动该服务。
4. 从查询分析器,运行下列脚本:
exec sp_addlinkedserver remote1
exec sp_setnetname remote1, <remote server name>
go
exec remote1.pubs.dbo.sp_executesql N'create table t (c1 int)'
go
set xact_abort on
go
begin tran
insert into remote1.pubs.dbo.t values (1)
commit tran
go



相关文章

相关软件