sql - Always On 可用性组中的 MSDTC

标签 sql sql-server msdtc alwayson

我工作的公司想在我们支持 SQL Server 的应用程序中使用 Always on 可用性组架构。我们有 3 个直接安装的数据库,其中一个按配置分区,我们目前使用 MSDTC 来协调这三个数据库之间的事务,即如果提交到数据库 A 和 B,并且 A 提交成功,B 上的失败意味着回滚A 和 B 而不仅仅是 B。

当我们看到这个 article 时遇到了一个问题

据我了解,这基本上意味着 MSDTC 在 Always on 可用性组模式下不受支持。 我在 SQL Server 2012 中找不到替代品

所以我的问题是:

  1. 我们有哪些选择(搁置或开源产品/代码更改)?
  2. 在此设置中运行 MSDTC 的具体影响是什么(完全崩溃/丢失事务)?

提前致谢,非常感谢您的帮助。 多尔

最佳答案

我最近问了一个类似的问题:https://dba.stackexchange.com/questions/47108/alwayson-ag-dtc-with-failover

> 我们有哪些选择(搁置或开源产品/代码更改)?

我认为你有两个选择:

  1. 更改您的应用,使其不需要 DTC。
  2. 更改您的数据库设置,使其不使用可用性组。

在我的情况下,我们使用的是商业应用程序,因此选项 1 不可行。我们目前正在使用数据库镜像,根据最近的研究,我现在了解到这也不被支持。

我的收获是让它发挥作用是可能的。但这并不容易,而且会让您处于无人支持的境地——这对我们来说是 Not Acceptable 。因此,我打算考虑利用日志传送并从热备用(使用镜像)或热备用(使用日志传送)转变。

在此设置中运行 MSDTC 的具体影响是什么(完全崩溃/丢失事务)?

如果您确实决定将 DTC 与可用性组或镜像一起使用,您将面临在故障转移场景中出现数据损坏/不一致的风险。您引用的文章很好地说明了这是如何发生的。

诚然,使用日志传送可能会出现相同的问题。我打算提出的论点是,通过日志传送,我们将能够滚动到特定的时间点,并且我们可以确保我们只移动到我们知道一切都一致的时间点。

我们使用的商业应用程序不支持高可用性。这是我们使其高度可用的尝试。

关于sql - Always On 可用性组中的 MSDTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17179221/

相关文章:

asp.net - 分布式事务完成。在新事务或 NULL 事务中登记此 session

.net - 如何确定 SqlConnection 是否被登记到 System.Transactions 的 tx 中?

sql - 使用sql查询将字符串转换为int

sql-server - 从 Ubuntu 访问 MYSQL 数据库所需的参数

c# - Entity Framework Throwing Cannot Insert Explicit Value for Identity Column In Table ... 当 IDENTITY_INSERT 设置为 OFF 错误

sql-server - 在 Management Studio 中使用 Python 自动化 "Generate Scripts"选项从本地 SQL Server 获取数据并将其保存在 .sql 文件中

sql-server - 无法开始分布式事务

sql - Derby Db行合并

mysql - 可视化管理表数据的简便方法

mysql - 从hive表中的2.3亿条记录中获取更多时间过滤器与mysql比较