这个问题通常意味着分布式事务协调器服务没有正常运行,或者其配置存在网络或安全策略上的问题,导致客户端或其他服务器无法与它建立通信。

下面我将为您提供一个从问题分析到逐步排查和解决的完整指南。
第一步:理解 MS DTC 是什么
- 全称: Microsoft Distributed Transaction Coordinator (微软分布式事务协调器)。
- 作用: 它是 Windows 操作系统的一个核心服务,用于跨多个数据库、消息队列或服务器协调和管理事务,一个事务需要同时更新位于两台不同 SQL Server 上的数据库,MS DTC 就负责确保这两个更新要么全部成功,要么全部失败(原子性)。
- 常见应用场景:
- SQL Server 镜像或 Always On 跨数据库事务。
- 涉及多个数据库服务器的事务。
- COM+ 应用程序。
- .NET 应用程序中使用
TransactionScope。
第二步:问题原因分析
当您收到“MS DTC 不可用”的错误时,可能的原因有很多,主要可以归结为以下几类:
- 服务未运行或配置错误: MS DTC 服务本身没有启动,或者其启动类型被设置为“禁用”。
- 防火墙阻止: Windows 防火墙或其他第三方防火墙阻止了 MS DTC 通信所需的端口(默认为 135 端口和动态 RPC 端口)。
- RPC/DCOM 配置问题: DTC 依赖于远程过程调用和组件对象模型服务,这些服务的配置可能不正确。
- 安全策略问题: DTC 通信需要特定的网络和安全权限(如 DTC Logon 和 Network Service 权限),这些权限可能缺失或被错误配置。
- 账户权限问题: 运行 MS DTC 服务的账户(通常是
NT AUTHORITY\NetworkService)权限不足。 - 资源冲突: MS DTC 所需的资源(如 MSDTC 日志文件所在的磁盘空间不足或权限问题)。
- 注册表损坏: 极少数情况下,与 DTC 相关的注册表项可能已损坏。
第三步:详细的排查和解决步骤
请按照以下顺序进行排查,因为后面的步骤依赖于前面的步骤。
步骤 1:检查 MS DTC 服务状态
这是最基本也是最重要的一步。

- 打开 服务器管理器,点击右上角的“工具” -> “服务”。
- 在服务列表中找到
Distributed Transaction Coordinator。 - 检查其 “状态” 是否为 “正在运行”。
- 检查其 “启动类型” 是否为 “自动” 或 “自动(延迟启动)”。
- 如果未运行:
- 右键点击该服务,选择 “启动”。
- 如果启动失败,请查看“服务”窗口下方的 “服务状态” 下的 “错误日志” 或 “属性” -> “恢复” 选项卡,里面会有详细的错误原因。
- 如果启动类型是“禁用”,请将其更改为“自动”,然后尝试启动。
步骤 2:检查并配置防火墙
DTC 通信需要开放特定端口。
- 打开 Windows Defender 防火墙(在控制面板中搜索)。
- 点击左侧的 “允许应用或功能通过 Windows Defender 防火墙”。
- 点击 “更改设置”(需要管理员权限)。
- 在列表中找到 “分布式事务协调器”,确保它在您的网络类型(如“专用”)下是 勾选 状态。
- 如果找不到或者上述方法无效,可以尝试更直接的端口开放方法:
- 在防火墙高级设置中,创建 “入站规则”。
- 规则类型选择 “端口”。
- 协议和端口选择 “TCP”,并输入
135。 - 操作选择 “允许连接”。
- 配置文件勾选 “专用” 和 “公用”(根据您的网络环境)。
- 给规则命名,
Allow DTC RPC Endpoint Mapper。 - 重要提示: 135 端口只是 RPC 端点映射器,真正的 DTC 数据传输使用的是动态分配的 RPC 端口。最佳实践是配置 RPC 动态端口分配。
如何配置 RPC 动态端口:
- 在服务器上打开 命令提示符(管理员)。
- 运行以下命令来查看当前的 RPC 动态端口范围:
netsh rpc show global确保结果中的
Dynamic Port Range是32768-65535或其他有效范围。 - 在两台需要进行 DTC 通信的服务器上,都执行以下命令,将 RPC 动态端口范围设置为一个较小的、固定的范围(
50000-50100),这样在防火墙中只需要开放这个范围即可,这比开放整个32768-65535要安全得多。netsh rpc set global 50000-50100 - 重启服务器 使配置生效。
- 在防火墙中,为两台服务器都创建一条新的入站规则,允许 TCP 端口
50000-50100的通信。
步骤 3:配置 DTC 安全设置
这是最复杂的部分,但也是解决问题的关键。

- 在命令提示符(管理员)中运行
dcomcnfg来打开 “组件服务”。 - 依次展开 “组件服务” -> “计算机” -> “我的电脑”。
- 右键点击 “我的电脑”,选择 “属性”。
- 切换到 “MSDTC” 选项卡。
- 点击 “安全配置”。
- 在弹出的窗口中,确保勾选了以下所有选项:
- 网络 DTC 访问:必须勾选。
- 允许远程客户端:勾选。
- 允许远程管理:勾选。
- 允许入站事务:勾选。
- 允许出站事务:勾选。
- 启用事务协调器:勾选。
- 不要求认证:根据您的安全策略决定,在测试环境中可以勾选以简化问题,但在生产环境中,建议使用 “要求认证” 或 “要求认证和加密” 以确保安全。
- 切换到 “事务管理器通信” 选项卡,点击 “不安全” 或 “安全”,为了排查问题,可以先选择 “不安全”,但最终应配置为 “安全”。
- 点击 “确定” 保存所有设置。
步骤 4:检查 RPC/DCOM 配置
- 再次打开 “组件服务” (
dcomcnfg)。 - 展开 “组件服务” -> “计算机” -> “我的电脑” -> “DCOM 配置”。
- 找到 “分布式事务协调器”。
- 右键点击它,选择 “属性”。
- “常规” 选项卡:确保 “应用程序身份” 为 “交互式用户” 或 “网络服务”。推荐使用
Network Service。 - “位置” 选项卡:确保勾选了 “在此计算机上运行”。
- “安全” 选项卡:
- 启动和激活权限:点击 “编辑”,确保
Network Service(或您选择的服务账户)有“本地启动”和“本地激活”权限。 - 访问权限:点击 “编辑”,确保
Network Service(或您选择的服务账户)有“本地访问”权限。 - 配置权限:点击 “编辑”,确保
System和Network Service有“本地启动”和“本地调用”权限。
- 启动和激活权限:点击 “编辑”,确保
- 点击 “确定” 保存。
步骤 5:重启服务并验证
- 完成以上所有配置后,必须重启 MS DTC 服务:
- 打开“服务”,找到
Distributed Transaction Coordinator。 - 先点击 “停止”,等待几秒钟,再点击 “启动”。
- 打开“服务”,找到
- 如果问题依旧,强烈建议重启服务器,这可以确保所有配置更改(尤其是防火墙和
