如果您正在使用本地 DTC

Discuss smarter ways to manage and optimize cv data.
Post Reply
Bappy11
Posts: 448
Joined: Sun Dec 22, 2024 9:31 am

如果您正在使用本地 DTC

Post by Bappy11 »

将群集 MS-DTC 配置为 WSFC 中的资源。

为了实现高可用性,请将此资源配置到集群共享存储上

在所有副本 Windows 服务器上禁用本地 MS-DTC。

使用“DTC_SUPPORT = PER_DB”选项启用分布式事务的 AG。

在 SQL Server 2016 SP2 中,必须在 CREATE AVAILABILITY GROUP 序列期间设置此选项。创建 AG后,此选项不可启用。
在 SQL Server 2017 或更高版本中,可以在创建 AG 期间和之后启用此选项


要假定提交任何有疑问的 MS DTC 事务,请设置为 1
要假定中止任何有疑问的 MS DTC 事务,请设置为 2
默认情况下,该值设置为 0,这需要 DBA 手动解决不确定事务,因为受影响的数据库将进入可疑模式。
建议在支持分布式事务的所有实例中一致设置此配置选项
以下是配置 Clustered MS DTC和配置 DTC_SUPPORT = PER_DB AG 选项的效果:
为了参与分布式事务,SQL Server 实例会加入 DTC。通常,SQL Server 实例会在本地服务器上科特迪瓦电报数据 加入 DTC,但在 AG 的情况下,SQL Server 实例应加入群集 MS DTC。每个 SQL Server 实例都会创建一个具有唯一资源管理器标识符 (RMID) 的资源管理器,并将其注册到群集 DTC。在默认配置中,SQL Server 实例上的所有数据库都使用相同的 RMID。同样在默认配置中,在 AG 故障转移期间 - 新的主副本将具有不同的 RMID(因为它在新实例上运行),因此新的主副本的实例不知道在旧的主副本的实例上启动的先前的不确定的分布式事务。

为了在 AG 故障转移移动期间支持分布式事务,每个数据库都应充当单独的资源管理器,并且必须具有唯一的 RMID。当可用性组的 DTC_SUPPORT = PER_DB 时,SQL Server 会为每个数据库创建一个资源管理器,并使用唯一的 RMID 向 Clustered DTC 注册。在此配置中,数据库是 DTC 事务的资源管理器。了解 RMID 在 AG 故障转移期间跟随数据库非常重要!这是解决有疑问的事务的秘诀!

确保 AG 故障转移无故障的其他有用提示:
副本应处于同步模式
在将 AG 移至其他副本之前,立即验证 AG 是否健康,并在当前主副本和辅助副本之间同步
验证故障转移后AG 是否健康且同步(发生大量事务的数据库可能需要几分钟才能同步。)
如果发现任何问题,请立即查阅 SQL 错误日志
简而言之,如果您的 SQL Server 2016 SP2(或更高版本)AG 环境需要支持分布式事务,请确保启用以下配置:
启用群集 MS DTC
Post Reply