KB4495663 - 修复:在 SQL Server 2016 和 2017 中,当创建分布式可用性组失败时,会出现错误 41162

应用对象
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

症状

假设您使用 Microsoft SQL Server 2016 或 2017。 当可用性组在删除并重新创建 DAG 后立即加入现有的分布式可用性组 (DAG) ,它可能无法加入 DAG,并且你会收到类似以下内容的错误消息:

      

Always On:处理处于状态“FORWARDER”的 AG“AGName”的 AG 配置更改通知 (7) 。
错误:41162,严重性:16,状态:0。
无法验证可用性组“AGName”配置的序列号。  内存中的序列号与保留的序列号不匹配。  可用性组和/或本地可用性副本 (replica) 将自动重启。  此时无需用户操作。
Always On:AR 'AGName' 现在正在处理类型 64) (通知。
Always On:处理处于状态为“FORWARDER”的 AG 'AGName' 的 AG 配置更改通知 (7) 。
Always On:AR “AGName” 现在正在验证 WSFC 中的 AG 完整性。
Always On: AR 'AGName' 角色转换 [FORWARDER] --> [FORWARDER], trigger [VALIDATE_AG_CONFIG], state (wsfc = 1, metadata = 1) 。
Always On:AR 'AGName' 现在正在处理 (类型 -2) 通知。

此外,错误 41162 可能会带来 AG 解析状态,并可能导致另外两个问题:错误 19407 和断言失败。

      

错误 19407:

对于 Always On 可用性组状态更改,正在数据库 DBName 中回滚不合格的事务。 预计回退完成度:100%。 这只是信息提供的消息。 无需用户操作。
[HaDrDbMgr::SetPrimaryAR]将主数据库设置为 AGID: AGNumber, ReplicaID: ReplicaNumber, AGDBID: AGDBNumber
错误:19407,严重性:16,状态:2。
可用性组 “GroupName” 与 Windows Server 故障转移群集之间的租用已过期。 SQL Server 实例与 Windows Server 故障转移群集之间发生连接问题。 若要确定可用性组是否正确故障转移,请检查 Windows Server 故障转移群集中相应的可用性组资源。

断言:

Always On:处理处于状态“RESOLVING_NORMAL” (0) 的 AG“DatabaseName”的 AG 配置更改通知。
      

Always On:AR “DatabaseName”现在正在验证 WSFC 中的 AG 完整性。
      

Always On:GetTransportWithRef () 被拒绝,因为本地 AR 未联机。
      

数据库“DatabaseName”的状态信息 - 强化 LSN:“ (34:304752:1) ” 提交 LSN: ' (0:0:0) ' 提交时间:“1900 年 1 月 1 日中午 12:00”
      

RECOVERY (DatabaseName, 6) : Starting to stop parallel redo workers
      

**转储线程 - spid = 0, EC = 0x000001F280CC7250
      

正在发送到 FileLocation 的堆栈转储
      

* 开始堆栈转储:
      

* 位置: “FileLocation”:1774
      

* 表达式:GetContext () -GetController> () -GetHadrArRoleExternal> () == HADR_ROLE_FORWARDING_SECONDARY
      

* SPID: SPId
      

* Process ID: ProcessId
      

错误:17066,严重性:16,状态:1。
      

SQL Server 断言: file: <“filelocation”>, line=1774 失败断言 = 'GetContext () -GetController> () -GetHadrArRoleExternal> () == HADR_ROLE_FORWARDING_SECONDARY'。 此错误可能与计时有关。 如果重新运行语句后错误仍然存在,请使用 DBCC CHECKDB 检查数据库的结构完整性,或重启服务器以确保内存中数据结构未损坏。
      

错误:3624,严重性:20,状态:1。
      

系统断言检查失败。 查看 SQL Server 错误日志了解详细信息。 断言失败通常是由软件 bug 或数据损坏导致的。 若要检查数据库损坏,请考虑运行 DBCC CHECKDB。 如果你同意在安装过程中向 Microsoft 发送转储,则将向 Microsoft 发送一个小型转储。 更新可能来自 Microsoft 的最新服务包或技术支持的修补程序中提供。
      

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

解决方法

此问题已在 SQL Server 的累积更新中进行了修复:

关于 SQL Server 的累积更新:
      

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

按需修补程序信息:

此问题已在以下 SQL Server 按需修补程序中修复:

参考资料

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