症状
请考虑以下情况:
-
您使用的是 Microsoft SQL Server 2012 或 SQL Server 2014。
-
您的数据库在主副本中启用了 service broker。
-
备份已启用 service broker 的主服务器中的数据库,并在辅助服务器上还原该数据库。
-
在主服务器和辅助服务器之间定义可用性组的过程中,你尝试使用新的可用性组向导或命令: ALTER DATABASE <dbname> "设置 HADR 可用性组 = <agname " 将数据库联接到可用性组>
在此方案中,将在 SQL Server 错误日志中记录以下错误:
{错误:3449,严重级别:21,状态:1。必须关闭 SQL Server 才能恢复数据库(数据库 ID 1)。 数据库或者是无法关闭的用户数据库或系统数据库。 重新启动 SQL Server。 如果在再次启动、修复或 restoreSQL 跟踪后,数据库无法恢复,请关闭服务器。 跟踪 ID = "1"。 这只是一条信息性消息;无需用户操作。}
原因
出现此问题的原因是,如果已将 service broker 的数据库备份并还原到辅助服务器,则不会启用已还原数据库中的 service broker。 数据库仍在内部保留 service broker id。将辅助服务器上的已还原数据库添加到可用性组时,将启用 service broker。 检测可用性数据库中的同一 GUID,并引发以下错误(静默): 9772 "数据库中的 Service Broker"<dbname>"无法启用,因为已启用具有相同 ID 的 Service broker"。这将导致在数据库加入可用性组时出现错误3449,并导致 SQL server 意外关闭。
解决方案
在 SQL Server 的以下累积更新中,此问题首先已修复。
SQL Server 2014 的累积更新1 /en-us/help/2931693
SQL Server 2012 SP1 的累积更新9 /en-us/help/2931078
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。