KB4092554-修复:当跨数据库事务提升到 SQL Server 可用性组中的分布式事务时出现错误627或12324。

症状

假设你使用 Microsoft SQL Server 中的 WITH DTC_SUPPORT = PER_DB 子句创建可用性组。 当你尝试在事务或系统存储过程(如sp_executesql)中执行保存事务语句时,将收到以下错误消息之一:

消息627,级别16,状态0,行 LineNumber 无法在分布式事务内使用 "保存事务"。 消息12324、级别16、状态100、行 LineNumber 内存优化的表不支持分布式事务(DTC)。 错误:3933,严重性:16,状态:1。 无法将事务升级到分布式事务,因为此事务中有活动的保存点。

原因

当启用 "始终启用" 组中的数据库时 使用 DTC_SUPPORT = PER_DB时, 只要事务涉及多个数据库, 事务就会升级到 sql SERVER 2016 SP2 和 sql SERVER 2017 中的 MSDTC 事务。 MSDTC 事务存在限制,例如,无法使用 "保存点",不能使用内存优化的表。

在某些情况下,由于用户拥有涉及两个用户数据库的事务,因此会发生跨数据库事务,但这是因为事务涉及当前数据库和系统数据库(master、tempdb、model、system resource 数据库)。 由于系统资源数据库实际上是只读的,因此,如果跨数据库事务涉及系统资源数据库而不是其他系统数据库,则无需提升到 MSDTC 事务。

解决方案

如果系统资源数据库和属于 PER_DB DTC 的可用性组的一部分的用户数据库涉及到同一 SQL Server 实例内的跨数据库事务,此知识库中引入的修补程序将跳过对 MSDTC 事务的提升。

因此,如果上面列出的错误的原始原因是涉及系统资源数据库的跨数据库事务,此修补程序将解决此问题。 有时,用户可能会看到上面列出的错误与相同的基本原因。 下表列出了此修复程序的适用条件:

  • 数据库是使用 DTC_SUPPORT = PER_DB 启用的 Alwayson 可用性组的一部分。

  • 跨数据库事务涉及此数据库和同一 SQL Server 实例中的系统资源数据库。

  • 在跨数据库事务内,将使用 "保存事务",或者涉及内存优化表。

如果没有此修补程序,此类交易将失败,并列出上述错误。 通过此修补程序,应继续进行此类交易。

注意: 此修补程序解决涉及系统资源数据库的跨数据库事务,但涉及用户数据库并包含 保存事务 语句的任何跨数据库事务仍将失败,并且必须重写。

在 SQL Server 的以下累积更新中修复了此问题:

SQL Server 2017 累积更新7       

SQL Server 2016 SP2 的累积更新1

SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:

SQL Server 2017 的最新累计更新

SQL Server 2016 的最新累计更新

更多信息

有关DTC_SUPPORT = PER_DB、内存优化表、可在以下链接中找到保存事务的其他信息。

同一 SQL Server 实例内的数据库事务将此部分链接到https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instance内存优化表将此部分链接到https://docs.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitations此部分保存到https://docs.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarks

https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

参考

了解 Microsoft 用于描述软件更新的 术语

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×