Windows 10 Pro下MSDTC与SQL Server协同报错:RpcMgmtInqServerPrincName调用失败
MSDTC与SQL Server协同运行失败:Msg 8501错误排查
我正尝试在Windows 10 Pro系统上实现MSDTC与SQL Server的协同运行。已经启动了Distributed Transaction Coordinator服务,该服务使用Network Service账户,但在SQL Server中启动分布式事务时,出现以下错误:
Msg 8501, Level 16, State 3, Line 1 MSDTC on server 'DESKTOP-99PFPB8' is unavailable.
我按照官方说明启用了DTC连接管理器追踪,追踪日志如下:
05-11-2018 10:52:25:672 : [3d58.77ac] 0x00000000 [ TRACE_CM] [ TRACE_INFO] InitRpcSecurity (com\complus\dtc\dtc\cm\src\iomgrrpc.cpp@382): Calling RpcServerRegisterAuthInfo with NT Service\MSSQLSERVER as SPN 05-11-2018 10:52:25:678 : [3d58.75c4] 0x800706d3 [ TRACE_CM] [ TRACE_ERROR] CRpcIOManagerClient::SetRpcSecurity (com\complus\dtc\dtc\cm\src\iomgrclt.cpp@569): [Remote:DESKTOP-99PFPB8 a2e530a1] Call to RpcMgmtInqServerPrincName failed. The partner does not support secure calls 05-11-2018 10:52:25:681 : [3d58.75c4] 0x80070006 [ TRACE_CM] [ TRACE_ERROR] CRpcIOManagerClient::PokeWrapper (com\complus\dtc\dtc\cm\src\iomgrclt.cpp@1174): [Remote:DESKTOP-99PFPB8 a2e530a1] Exception raised in the rpc call C_PokeW 05-11-2018 10:52:25:685 : [3d58.75c4] 0x80000171 [ TRACE_CM] [ TRACE_ERROR] CRpcIOManagerClient::Poke (com\complus\dtc\dtc\cm\src\iomgrclt.cpp@992): [Remote:DESKTOP-99PFPB8 a2e530a1] SecurePokeWrapper call failed 05-11-2018 10:52:25:688 : [3d58.75c4] 0x00000000 [ TRACE_CM] [ TRACE_INFO] CRpcIOManagerClient::Poke (com\complus\dtc\dtc\cm\src\iomgrclt.cpp@1035): Secure Poke failed for LRPC and falling back to unsecure mode... Setting RPC security again! 05-11-2018 10:52:25:692 : [3d58.75c4] 0x80070006 [ TRACE_CM] [ TRACE_ERROR] CRpcIOManagerClient::PokeWrapper (com\complus\dtc\dtc\cm\src\iomgrclt.cpp@1174): [Remote:DESKTOP-99PFPB8 a2e530a1] Exception raised in the rpc call C_PokeW 05-11-2018 10:52:25:694 : [3d58.75c4] 0x80000171 [ TRACE_CM] [ TRACE_ERROR] CRpcIOManagerClient::Poke (com\complus\dtc\dtc\cm\src\iomgrclt.cpp@1081): [Remote:DESKTOP-99PFPB8 a2e530a1] PokeWrapper call failed
目前我陷入困境,有人能解释这些错误的含义吗?
我已尝试的解决步骤:
- 重启DTC服务,随后重启SQL Server服务
- 重新安装DTC(执行
msdtc -uninstall,重启系统,msdtc -install,msdtc -resetlog) - 启用Network DTC Access(尽管是单机环境),勾选了"Allow Remove Clients"、"Allow Remote Administration"、"Allow Inbound"、"Allow Outbound"和"No Authentication Required"
- 全新安装Windows系统
错误含义解析
先拆解日志里的关键错误点:
RpcMgmtInqServerPrincName failed. The partner does not support secure calls:SQL Server尝试通过安全RPC协议和MSDTC通信,但MSDTC不支持这种安全调用方式,或者两者的安全配置完全不匹配,导致握手失败。SecurePokeWrapper call failed:安全模式下的Poke调用(这是DTC和SQL Server之间用来验证连通性的核心操作)失败后,系统自动尝试降级到非安全模式,但非安全模式的PokeWrapper调用也失败了,最终触发了"MSDTC不可用"的错误。
说白了,核心问题就是SQL Server和MSDTC之间的RPC通信安全配置不兼容,哪怕是单机环境,这种进程间通信也需要权限和设置的精准匹配。
针对性排查建议
你已经做了不少基础修复,试试这些更精准的操作:
- 给SQL Server账户加DTC权限:把SQL Server的服务账户(默认是
NT Service\MSSQLSERVER)添加到本地的Distributed Transaction Coordinator Users组里,确保它有访问MSDTC的权限。 - 验证并修复SPN配置:日志里提到用
NT Service\MSSQLSERVER作为SPN注册,打开命令提示符(管理员权限),执行setspn -L NT Service\MSSQLSERVER查看是否有MSSQLSvc/DESKTOP-99PFPB8和MSSQLSvc/DESKTOP-99PFPB8:1433(1433替换成你的SQL端口)这两个SPN,如果缺失,执行:setspn -A MSSQLSvc/DESKTOP-99PFPB8 NT Service\MSSQLSERVER setspn -A MSSQLSvc/DESKTOP-99PFPB8:1433 NT Service\MSSQLSERVER - 检查防火墙规则:临时关闭Windows防火墙测试一下,如果能正常运行,说明防火墙拦截了RPC通信。之后再配置允许MSDTC的规则(默认端口135,还有动态端口范围)。
- 调整DTC安全设置:打开「组件服务」→「计算机」→「我的电脑」→「分布式事务协调器」→「本地DTC」→右键「属性」→「安全」选项卡,除了你已勾选的,再勾选
Enable XA Transactions(如果你的事务需要XA支持),同时确认Network Service账户在DTC的安全设置里有足够权限。 - 检查注册表项:打开注册表编辑器,定位到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC,如果存在AllowOnlySecureRpcCalls项,把它的值改成0(值为1会强制安全RPC,容易导致不兼容)。
试试这些步骤,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Warren Reed
相关产品推荐
相关产品推荐

