KB2929193 - 修复:在配置 AlwaysOn 可用性组期间将数据库作为辅助副本 (replica) 加入数据库时,SQL Server 2012 或 SQL Server 2014 实例关闭

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

症状

请考虑以下情形:

  • 您使用 Microsoft SQL Server 2012 或 SQL Server 2014。
  • 你拥有在主要副本 (replica) 中启用了 Service Broker 的数据库。
  • 在启用了 Service Broker 的主服务器中备份数据库,并在辅助服务器上还原它。
  • 在定义主服务器和辅助服务器之间的可用性组时,尝试使用“新建可用性组”向导或以下命令将数据库加入可用性组:
    ALTER DATABASE <dbname> SET HADR AVAILABILITY GROUP = <agname>

在这种情况下,SQL Server 错误日志中将记录以下错误:

注意

{
错误:3449,严重性:21,状态:1。
SQL Server必须关闭才能恢复 (数据库 ID 为 1) 的数据库。 数据库要么是无法关机的用户数据库,要么是系统数据库。 重启 SQL Server。 如果数据库在再次启动、修复或还原后仍无法恢复
SQL 跟踪由于服务器关闭而停止。 跟踪 ID = '1'。 这只是一个信息来源的消息;无需用户操作。
}

      

原因

出现此问题的原因是,如果已启用 Service Broker 的数据库备份并还原到辅助服务器,则未启用还原数据库中的 Service Broker。 数据库仍会在内部保留一个 Service Broker ID。

将辅助服务器上还原的数据库添加到可用性组时,Service Broker 将被启用。 在可用性数据库中检测到相同的 GUID,并引发以下错误 (无提示) :
9772 “无法启用数据库”<dbname>“中的 Service Broker,因为已存在具有相同 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 的每个新累积更新都包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:

      

状态

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