Проблемы
Рассмотрим следующий сценарий.
-
Вы используете Microsoft SQL Server 2012 или SQL Server 2014.
-
У вас есть база данных, в которой включен компонент Service Broker в основной реплике.
-
Вы заполните базу данных на основном сервере, на котором включен компонент Service Broker, и восстановите его на сервере получателя.
-
В рамках определения группы доступности между основным и дополнительным серверами вы пытаетесь присоединиться к базе данных к группе доступности с помощью мастера создания группы доступности или команды: ALTER DATABASE <dbname> Set группа доступности HADR = <agname>
В этом случае в журнале ошибок SQL Server регистрируется следующая ошибка:
{Ошибка: 3449, серьезность: 21, состояние: 1. SQL Server необходимо завершить работу, чтобы восстановить базу данных (идентификатор базы данных 1). База данных — это база данных пользователей, которую невозможно закрыть, или системную базу данных. Перезапустите SQL Server. Если не удается восстановить базу данных после другого запуска, восстановление или restoreSQL трассировка была остановлена из-за завершения работы сервера. Trace ID = "1". Это информационное сообщение; никаких действий пользователя не требуется.}
Причина
Проблема возникает из-за того, что если база данных с поддержкой компонента Service Broker была создана и восстановлена на сервере-получателе, компонент Service Broker в восстановленной базе данных не включен. База данных по-прежнему хранит идентификатор компонента Service Broker для внутреннего использования. При добавлении восстановленной базы данных на сервере получателя к группе доступности компонент Service Broker включается. Обнаружен один и тот же идентификатор GUID в базе данных доступности, и возникает следующая ошибка: 9772 "компонент Service Broker в базе данных"<dbname>"не может быть включен, так как уже есть включенный компонент Service Broker с таким же идентификатором. Это приводит к ошибке 3449, поскольку база данных присоединяется к группе доступности и приводит к неожиданному завершению работы SQL Server.
Решение
Эта проблема впервые устранена в следующем накопительном обновлении SQL Server.
Накопительное обновление 1 для SQL Server 2014 /en-us/help/2931693
Накопительное обновление 9 для SQL Server 2012 с пакетом обновления 1 (SP1) /en-us/help/2931078
Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, которые были включены в предыдущий накопительный пакет обновления. Ознакомьтесь с самыми последними накопительными обновлениями для SQL Server.
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".