症状
假设你使用 Microsoft SQL Server 2014 中的 "AlwaysOn 可用性组" 功能。 重新启动 SQL Server 实例后,参与可用性组的数据库可能会在辅助副本上显示 "不同步" 状态。 此外,你无法从可用性组加入或删除数据库。 也不能从辅助副本中删除可用性组。在这种情况下,SQL Server 错误日志中将记录类似于以下的错误消息:
启动数据库 "Database_Name"。由于数据库属于可用性组(组 ID: Group_ID),跳过默认启动数据库 "Database_Name"。 数据库将由可用性组启动。 这只是一条信息性消息。 无需用户操作。数据库 "Database_Name" 的状态信息-Hardended Lsn: "(0:0:0)" 提交 Lsn: "(0:0:0)" 提交时间: "日期时间" AlwaysOn 可用性组与主数据库的连接已针对可用性副本 "Replica_Name" 上的副本 ID 为 {Replica_ID} 的辅助数据库 'Database_Name' 终止。 这只是一条信息性消息。 无需用户操作。数据库 "Database_Name" 的状态信息-Hardended Lsn: "(0:0:0)" 提交 lsn: "(0:0:0)" 提交时间: "数据库"Database_Name"的日期时间" 状态信息: "(0:0:0)" 提交 Lsn: "(0:0:0)" 提交时间: "日期时间" 启动数据库 'Database_Name'。已针对辅助数据库 "Database_Name" (副本 ID 为: {Replica_ID})的可用性副本 "REPLICA_NAME" 上为辅助数据库 "Database_Name" 建立了 AlwaysOn 可用性组连接。 这只是一条信息性消息。 无需用户操作。2289事务将在数据库 "Database_Name" 中前滚(107:0)。 这只是一条信息性消息。 无需用户操作。CHECKDB 对于数据库 "Database_Name" 已完成, 日期时间 (本地时间)上没有错误。 这只是一条信息性消息;无需用户操作。对副本 ID 为 {Replica_ID} 的可用性副本 "REPLICA_NAME" 上的辅助数据库 "Database_Name" 终止了 AlwaysOn 可用性组与主数据库的连接。 这只是一条信息性消息。 无需用户操作。
原因
出现此问题的原因是恢复线程和切换角色线程之间存在死锁条件。
解决方案
此问题首先在 SQL Server 2014 的以下累积更新中修复:
Sql server 2014 的累积更新 2- sql server 2014 的累积更新 9
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
参考
了解 Microsoft 用于描述软件更新的 术语 。