症状
假设在 Microsoft SQL Server 2016 或2017中至少有一个具有 DTC_SUPPORT = PER_DB 的 AlwaysOn 可用性组。 如果你执行的 SQL Server 触发器包含至少一个可用性组数据库中涉及的跨数据库事务,则可能会发生声明失败。 SQL Server 错误日志报告以下断言失败消息:
DateTime spid20s * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *DateTime * * * * * * * * * * * * * * * *= Spid20s *文件名: 3880DateTime spid20s * 表达式: m_state = = BaseXact:: XACT_PREPARED | |m_state = = BaseXact:: XACT_COMMITTEDDateTime SPID20S * SPID:20
DateTime spid20s 错误:17066,严重性:16,状态:1。DateTime Spid20s SQL Server Assertion: File: <文件名>,Line =LineNumber 失败断言 = ' m_state = = BaseXact:: XACT_PREPARED | |m_state = = BaseXact:: XACT_COMMITTED '。 此错误可能与计时有关。 如果再次运行该语句后,该错误仍然存在,请使用 DBCC CHECKDB 检查数据库的结构完整性,或者重新启动服务器以确保内存中的数据结构未损坏。DateTime spid20s 错误:3624,严重性:20,状态:1。DateTime spid20s 系统断言检查失败。 有关详细信息,请查看 SQL Server 错误日志。 通常,断言失败由软件错误或数据损坏导致。 若要检查数据库是否损坏,请考虑运行 DBCC CHECKDB。 如果你同意在安装期间将转储发送到 Microsoft,则会向 Microsoft 发送一个小转储。 在来自 Microsoft 的最新服务包或来自技术支持的修补程序中,可能会提供更新。
此外,你可能会收到类似于以下内容的错误消息:
DateTime服务器错误:19407,严重级别:16,状态:1。
日期时间 服务器可用性组 "组名 " 和 Windows Server 故障转移群集之间的租约已过期。SQL Server 实例与 Windows Server 故障转移群集之间出现连接问题。若要确定可用性组是否正确故障转移,请检查 Windows Server 故障转移群集中对应的可用性组资源。
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。
解决方案
累积更新信息:
在 SQL Server 的以下累积更新中修复了此问题:
关于 SQL Server 的累积更新:SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
按需即时修复程序信息:
此问题已在 SQL Server 的以下按需修补程序中修复:
参考
了解 terminology Microsoft 用于描述软件更新的术语。