MSSQLSERVER_7391
适用于:SQL Server
属性 | 值 |
---|---|
产品 | SQL Server |
事件 ID | 7391 |
事件来源 | MSSQLSERVER |
组件 | SQLEngine |
符号名称 | RMT_TRANS_JOIN_FAIL |
消息正文 | 无法执行该操作,因为链接服务器 "%ls" 的 OLE DB 访问接口 "%ls" 无法启动分布式事务。 |
说明
发生此错误的原因是Microsoft分布式事务处理协调器(MSDTC)服务未运行或已禁用网络访问。
在某些情况下,也可能收到错误 8522:
Microsoft Distributed Transaction Coordinator (MS DTC) has stopped this transaction.
7300 到 7399 范围内的错误号表示影响提供程序的问题。 由于每个提供程序可能具有不同的功能并显示不同的详细信息,因此可能不会收到完整的错误消息。 若要从提供程序检索完整的错误消息,请在运行生成错误的查询之前运行以下命令:
DBCC TRACEON (3604, 7300)
如果从 SQL Server 复制或 SQL Server Integration Services (SSIS)等进程收到错误 7391,则如果代码包含 BEGIN DISTRIBUTED TRAN
语句,则也可能会收到错误消息。
用户操作
注意
最佳做法是限制事务中的代码,该事务涉及仅对远程服务器进行的分布式查询。
可支持性
若要检查驱动程序是否支持分布式事务,请联系链接服务器查询中使用的驱动程序供应商。
检查目标服务器上的对象是否指向第一台服务器。 这称为环回情况。 环回链接服务器 用于测试,许多操作(如分布式事务)不支持。
服务器通信
若要确保服务器之间的通信成功,请执行以下步骤:
检查网络名称解析是否正常工作。 确保服务器可以按名称相互通信,而不仅仅是通过 IP 地址进行通信。 检查两个方向(例如,从服务器 A 到服务器 B,从服务器 B 到服务器 A)。 在运行分布式查询之前,请解决网络上的所有名称解析问题。 这可能涉及更新 WINS、DNS 或 LMHost 文件。
如果有防火墙,请确保正确打开远程过程调用(RPC)端口。 有关详细信息,请参阅以下文章:
检查指向目标服务器上的对象。 如果对象是视图或存储过程,或者它导致触发器运行,请检查它是否隐式指向另一个服务器。 如果是,则第三台服务器是问题的根源。 直接在第三台服务器上运行查询。 如果无法执行此操作,则链接服务器查询不是问题。 首先解决基础问题。
检查是否使用远程访问服务器(RAS)访问远程服务器。 如果是,请确保已实现路由 RAS(RRAS)。 链接服务器不适用于 RAS,因为 RAS 仅允许单向通信。
服务器配置
按照以下步骤配置服务器:
在分布式事务涉及的所有服务器上启动分布式事务处理协调器(DTC 或 MS DTC)。 有关启用网络 DTC 访问的信息,请参阅 OLE DB 提供程序 - SQL Server 的错误消息。
针对 大多数 OLE DB 访问接口(包括 SQL Server)在隐式或显式事务中,将XACT_ABORT 选项设置为 ON。 在运行查询之前,可以运行以下命令来执行此操作。
SET XACT_ABORT ON
注意
如果提供程序支持嵌套事务,则不需要此选项。
检查任何服务器是否位于 Windows Server 故障转移群集上。 群集上的 MSDTC 服务必须有自己的 IP 地址。 确保在每个服务器上发生 DTC 服务的正确名称解析。 必须在名称解析系统中定义 DTC 的 IP 地址(例如 WINS、DNS 或 LMHosts)。 验证每个服务器是否可以按名称与其他服务器上的 MSDTC 通信,而不仅仅是 IP 地址。 检查两个方向。 例如,从服务器 A 检查到服务器 B 的 MSDTC 服务,然后从服务器 B 检查到服务器 A 的 MSDTC。 在运行分布式查询之前,必须解决网络上的所有名称解析问题。 若要在群集上配置 MSDTC,请参阅 SQL 故障转移群集上的 MSDTC 建议 - Microsoft社区中心。
如果使用较旧的远程服务器技术而不是建议的链接服务器,请将 远程进程跨 配置选项设置为
OFF
服务器,或在运行任何分布式查询之前运行SET REMOTE_PROC_TRANSACTIONS OFF
语句。 如果此设置设置为ON
,则远程过程调用是在本地事务中进行的。 有关详细信息,请参阅 配置远程过程 trans (服务器配置选项) - SQL Server。检查两台服务器上的系统函数
@@SERVERNAME
的返回值。 验证返回值是否与每台服务器的计算机名称匹配。 如果不匹配,请重命名服务器。验证 SQL Server 启动帐户是否对以下注册表项具有完全控制权限:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer