https://docs.microsoft.com/zh-cn/biztalk/core/troubleshooting-problems-with-msdtc
这些设置我测试不开启也不会造成失败,不知道是不是什么原理
alter proc sp_dtc_test as begin set xact_abort on --begin distributed transaction insert into win1.test.dbo.dtc_test values(1,getdate()) insert into win1.test.dbo.dtc_test select * from test.dbo.dtc_test --commit tran --select * from win1.test.dbo.dtc_test order by date desc end
大多数 BizTalk Server 运行时操作都需要 Microsoft 分布式事务处理协调器 (MSDTC) 支持,以确保操作事务性一致。 如果没有 MSDTC 事务支持,则相关联的 BizTalk Server 运行时操作将无法进行。 未正确配置 MSDTC 事务支持时通常会影响的 BizTalk 组件包括(但不限于)单一登录服务、BizTalk 主机实例以及 BizTalk Server 所连接的任何 SQL Server 实例。 本部分包含的信息描述了与 MSDTC 相关的错误和步骤,遵循这些步骤可帮助你诊断并解决 MSDTC 存在的问题。
未正确配置 MSDTC 事务支持时会出现的错误
“由于 Microsoft 分布式事务处理协调器出现问题,因此无法连接到配置数据库。 该事务管理器已经禁止了它对远程/网络事务的支持"。
“由于 Microsoft 分布式事务处理协调器出现问题,因此无法连接到配置数据库。 此事务已明地或暗地被确认或终止”。
“错误代码:0x8004d00a,无法在指定的事务处理协调器中登记新事务”。
“无法从配置存储中检索接收位置‘MySample ReceiveLocation’的传输类型数据。 主 SSO Server‘MyServer’发生故障。 RPC 服务器不可用”。
“错误代码:0x8004d025,,合作伙伴事务管理器已禁用对远程/网络事务的支持”。
“错误代码:0xc0002a24,无法导入 DTC 事务。 请检查 MSDTC 是否正确配置以用于远程操作”。
“0x8004d01c
[0x1705] 创建内部工作项时发生失败。确保 SQL Server 正在运行。”
要解决 MSDTC 配置错误,请遵循以下步骤。
要在计算机之间成功完成 MSDTC 事务,客户端计算机和服务器计算机都必须能够将对方的 NetBIOS 名称解析为正确的 IP 地址。 要检查 NetBIOS 名称解析是否在两个方向上(客户端到服务器和服务器到客户端)都工作正常,请按以下步骤进行操作:
备注:NetBIOS 名称还常称为 网络 名称。
ipconfig /all
命令提示符窗口中即会列出与客户端计算机相关联的 IP 地址。
b. 在服务器计算机上启动命令提示符,键入以下命令,然后按 Enter:
ipconfig /all
命令提示符窗口中即会列出与服务器计算机相关联的 IP 地址。
3. 检查每台计算机的 NetBIOS 名称是否解析为与该计算机相关联的 IP 地址之一:
a. 在客户端计算机上启动命令提示符,键入以下命令,然后按 Enter:
ping <NetBIOS name of server computer>
ping 命令的结果应该返回与服务器计算机相关联的 IP 地址。
b. 在服务器计算机上启动命令提示符,键入以下命令,然后按 Enter:
ping <NetBIOS name of client computer>
ping 命令的结果应该返回与客户端计算机相关联的 IP 地址。
c. 验证每台计算机上与 NetBIOS 名称相关联的 IP 地址反向名称查找解析为正确的计算机名。
在客户端计算机上启动命令提示符,键入以下命令,然后按 Enter:
ping -a <IP Address associated with client computer NetBIOS name>
ping 命令的结果应该返回一个 NetBIOS 名称或与步骤 3a 中使用的 NetBIOS 名称相对应的完全限定域名。 如果返回的名称不与步骤 3a 中使用的 NetBIOS 名称相匹配或对应,则 IP 地址反向查找将失败,这会导致 MSDTC 事务失败。
d. 在服务器计算机上启动命令提示符,键入以下命令,然后按 Enter:
ping -a <IP Address associated with server computer NetBIOS name>
ping 命令的结果应该返回一个 NetBIOS 名称或与步骤 3b 中使用的 NetBIOS 名称相对应的完全限定域名。 如果返回的名称不与步骤 3b 中使用的 NetBIOS 名称相匹配或对应,则 IP 地址反向查找将失败,这会导致 MSDTC 事务失败。
如果 NetBIOS 名称解析在任何一个方向上不成功,或者反向名称查找失败,请在 DNS 服务器、NetBIOS 名称服务器、HOSTS 文件或 LMHOSTS 文件中添加适当的条目以纠正问题。
备注: 计算机使用的名称解析方法随计算机的 NetBIOS 节点类型不同而异。 有关 NetBIOS 节点类型的详细信息,请参阅 NetBIOS 名称解析。
通过网络实现的 MSDTC 功能取决于通过网络实现的 RPC 功能。 通过防火墙使用 RPC 功能需要打开特定的端口,以满足 RPC 动态端口的分配要求。 如果在 BizTalk Server 与远程服务器之间有防火墙,则请按照 如何配置与防火墙一起使用的 RPC 动态端口分配 中的步骤进行操作,以满足 RPC 动态端口分配的要求。
Windows 提供了用于管理如何通过网络访问 MSDTC 的安全增强功能。 通过修改 MSDTC 安全设置,你可以控制 MSDTC 在网络中如何与远程计算机通信。 此表列出了配置 MSDTC 安全配置时可用选项的建议值:
配置选项 | 默认值 | 建议的值 |
---|---|---|
网络 DTC 访问 | 已禁用 | 已启用 |
客户端和管理 | ||
允许远程客户端 | 已禁用 | 已禁用 |
允许远程管理 | 已禁用 | 已禁用 |
事务管理器通信 | ||
允许入站 | 已禁用 | 已启用 |
允许出站 | 已禁用 | 已启用 |
要求进行相互身份验证 | 已启用 | 如果所有远程计算机都运行的是 Windows Server 2003 SP1 或 Windows XP SP2 或更高版本,并且都配置有“要求相互身份验证”,则为“已启用”。 |
要求对呼叫方进行身份验证 | 已禁用 | 如果在群集上运行 MSDTC,则为“已启用”。 |
不要求进行身份验证 | 已禁用 | 在远程计算机为 Windows Server 2003 SP1 之前的版本或 Windows XP SP2 之前的版本时启用。 |
启用 TIP | 已禁用 | 如果运行 BAM 门户,则为“已启用”。 |
启用 XA 事务 | 已禁用 | 如果与基于 XA 的事务系统进行通信(例如,使用 MQSeries 适配器与 IBM WebSphere MQ 通信),则为“已启用”。 |
应用这些更改后,MSDTC 服务将重新启动。
要访问 MSDTC 安全配置选项,请按照下列步骤操作:
备注:根据所做的更改,可能需要重新启动计算机以使更改生效。 如果在应用更改并重新启动 MSDTC 服务后仍然遇到问题,请重新启动在其中进行了更改的计算机,以确保更改生效。
如果启用了“要求相互身份验证” 或“要求对呼叫方进行验证” 配置选项,则必须为客户端计算机帐户授予“从网络访问此计算机” 用户权限。 如果没有为客户端计算机的计算机帐户授予“从网络访问此计算机” 用户权限,或者该帐户包括在“拒绝从网络访问这台计算机” 用户权限中,则该客户端与服务器计算机之间的 DTC 通信将失败。
默认设置为向 Everyone 组授予“从网络访问此计算机” 用户权限。 因此,除非修改了默认设置,否则无需更改此用户权限。 如果启用了“不要求进行验证” 配置选项,则“从网络访问此计算机” 用户权限不会应用于客户端计算机帐户。
要更改授予了“从网络访问此计算机”用户权限的用户或组,请按以下步骤进行操作:
Windows 通过要求验证对 RPC 接口的调用来提高安全性。 该功能可以通过 EnableAuthEpResolution 和 RestrictRemoteClients 注册表项来配置。 若要确保远程计算机能够访问 RPC 接口,请按照下列步骤操作:
警告:
对注册表编辑器的不当使用可能会引起问题,而必须重新安装操作系统。 请慎用注册表编辑器,风险自负。 有关如何备份、还原和修改注册表的详细信息,请参阅 Microsoft 知识库文章“Microsoft Windows 注册表说明”,网址为 Microsoft Windows 注册表说明。
备注:根据所做的更改,可能需要重新启动计算机以使更改生效。 如果在应用更改并重新启动 MSDTC 服务后仍然遇到问题,请重新启动在其中进行了更改的计算机,以确保更改生效。
Windows 防火墙服务可能会阻止计算机之间的 MSDTC 通信。 要确保未阻止计算机之间的 MSDTC 通信,请在 Windows 防火墙服务正在运行时,将 msdtc.exe 添加到 Windows 防火墙例外列表中。
如果在两台计算机中的一台上安装了 SQL Server,则可以使用 DTCTester 实用程序检查这两台计算机之间是否支持事务处理。 DTCTester 实用程序使用 ODBC 检查 SQL Server 数据库是否支持事务处理。 有关 DTCTester 的详细信息,请参阅 如何使用 DTCTester 工具。
如果两台计算机中都没有安装 SQL Server,则可以使用 DTCPing 检查这两台计算机之间是否支持事务处理。 DTCPing 是在两台计算机中都没有安装 SQL Server 的情况下替代 DTCTester 实用程序的良好工具,使用时必须既在客户端计算机上运行,也在服务器计算机上运行。 有关 DTCPing 的详细信息,请参阅 如何对 MS DTC 防火墙问题进行故障排除 和 配置 MICROSOFT 分布式事务处理协调器 (DTC) 通过防火墙进行操作。
重要:如果 DCTPing 返回警告:“警告:两台测试机器的 CID 值相同”,请按照 确保为 MSDTC 分配唯一的 CID 值 一节中的步骤在测试机器之间调整适当的 MSDTC 功能。
Windows 操作系统的 MSDTC 功能要求唯一的 CID 值以确保计算机间的 MSDTC 功能正常工作。 Windows 安装的磁盘重复映像必须具有唯一的 CID 值,否则,MSDTC 功能将受到影响。 在使用虚拟硬盘将一个操作系统部署到虚拟机上时,可能会发生这种情况。
要确定运行 Windows 操作系统的计算机的 MSDTC CID 值是否唯一,请检查两台计算机上 HKEY_CLASSES_ROOT\CID 注册表项下的各条目值。 如果这些值对于每台计算机并不是唯一的,请按照 如果其他疑难解答步骤不成功,请考虑重新安装分布式事务协调器服务 一节中的步骤在其中一台计算机上重新安装 MSDTC,为该计算机生成唯一的 MSDTC CID 值并调整相应的 MSDTC 操作。
在某些情况下,客户端与服务器之间的现有 MSDTC 连接可能会关闭,并且后续尝试使用此连接将导致以下错误消息: "新建事务无法登记到指定的事务协调器 (0x8004d00a) 有关详细信息,请参阅 尝试在 MS DTC 中启动事务时出现错误消息: "无法在指定的事务处理协调器中登记新事务"。
如果其他疑难解答步骤不成功,请考虑重新安装分布式事务协调器服务
请按照下列步骤卸载并重新安装 MSDTC:
1.以管理员身份打开命令提示符。
a. 在命令提示符下,键入以下命令以卸载分布式事务处理协调器服务: msdtc -uninstall
b. 在命令提示符下,键入以下命令以安装分布式事务处理协调器服务: msdtc –install
重要:重新安装 MSDTC 可能会更改分布式事务处理协调器服务的默认行为。 重新安装 MSDTC 后,请按照下列步骤以确保分布式事务处理协调器服务能够正常工作: