KB2929193 - ИСПРАВЛЕНИЕ: экземпляр SQL Server 2012 или SQL Server 2014 завершает работу при присоединении к базе данных в качестве дополнительного реплика во время настройки групп доступности AlwaysOn

Применяется к
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.
  • У вас есть база данных, в которой в основной реплике включен компонент Service Broker.
  • Вы создаете резервную копию базы данных на первичном сервере, на котором включен компонент Service Broker, и восстанавливаете ее на вторичном сервере.
  • Чтобы определить группу доступности между основным и дополнительным серверами, необходимо попытаться присоединить базу данных к группе доступности с помощью мастера создания группы доступности или команды:
    ALTER DATABASE <DBNAME> SET HADR AVAILABILITY GROUP = <agname>

В этом случае в журнале ошибок SQL Server регистрируется следующая ошибка:

Примечание

{
Ошибка: 3449, Серьезность: 21, Состояние: 1.
Чтобы восстановить базу данных, необходимо завершить работу SQL Server (идентификатор базы данных 1). База данных — это либо пользовательская база данных, работу которой не удалось завершить, либо системная база данных. Перезапустите SQL Server. Если базу данных не удается восстановить после очередного запуска, восстановите или восстановите
Трассировка SQL остановлена из-за завершения работы сервера. Идентификатор трассировки = '1'. Это только информационное сообщение; Никаких действий пользователя не требуется.
}

      

Причина

Эта проблема возникает из-за того, что если база данных, включенная с помощью компонента Service Broker, резервируется и восстанавливается на вторичном сервере, компонент Service Broker в восстановленной базе данных не включается. База данных по-прежнему сохраняет внутренний идентификатор компонента Service Broker.

При добавлении восстановленной базы данных на сервере-вторичном сервере в группу доступности включается компонент Service Broker. Обнаруживается тот же идентификатор GUID в базе данных доступности, и возникает следующая ошибка (без уведомления):
9772 "Компонент Service Broker в базе данных "<dbname>" не может быть включен, поскольку уже включен компонент Service Broker с тем же идентификатором".

Это приводит к ошибке 3449, так как база данных присоединяется к группе доступности, и вызывает неожиданное завершение работы SQL-сервера.

Решение

Эта проблема была впервые исправлена в следующем накопительном пакете обновления SQL Server.

Накопительный пакет обновления 1 для SQL Server 2014 г. /en-us/help/2931693

Накопительный пакет обновления 9 для SQL Server 2012 с пакетом обновления 1 (SP1) /en-us/help/2931078

Сведения о накопительных обновлениях для SQL Server

Каждый новый накопительный пакет обновления для SQL Server содержит все исправления и исправления безопасности, которые входили в состав предыдущего накопительного пакета обновления. Ознакомьтесь с последними накопительными пакетами обновления для SQL Server:

      

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».