Назад | Перейти на главную страницу

Как правильно выполнять резервное копирование, перемещение и восстановление базы данных, использующей Service Broker?

В настоящее время я разрабатываю приложение, которое использует SqlDependency который полагается на Service Broker.

У меня возникает проблема каждый раз, когда я перемещаю базу данных из стадии разработки в стадию, и я получаю YSOD, в котором говорится, что

Компонент SQL Server Service Broker для текущей базы данных не включен, поэтому уведомления о запросах не поддерживаются. Пожалуйста, включите Service Broker для этой базы данных, если вы хотите использовать уведомления.

Я не эксперт по SQL Server и поэтому не понимаю, почему это происходит. Я пробовал кучу вещей, например, бегать

ALTER DATABASE [DbName] SET ENABLE_BROKER

на вновь восстановленной базе данных. Это не решает проблему. Также звоню

ALTER DATABASE [DbName] SET NEW_BROKER WITH ROLLBACK IMMEDIATE

не помогает.

Я также бегал DISABLE_BROKER в моей базе данных разработки, а затем выполнил резервное копирование. Восстановлен на промежуточный сервер, а затем запустите оба ENABLE_BROKER и SET NEW_BROKER надеясь, что что-то даст.

Оба сервера работают под управлением SQL 2005 в Windows 2003.

Мое приложение использует SqlDependency.Start(connectionString) поэтому я считаю, что использую дефолт Конечная точка компонента Service Broker, а не именованная (?)

Базы данных названы разные на сервере разработки и подготовки, но некоторая конфигурация гарантирует, что приложение использует правильную строку подключения.

Что мне не хватает? Что я делаю не так?

Как правильно переместить (создать резервную копию / восстановить) базу данных, которая использует Service Broker / SqlDependency?

Вам необходимо восстановить базу данных с помощью опции ENABLE_BROKER (используя предложение WITH ENABLE_BROKER в ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ команда). Имейте в виду, что база данных сохранит свой уникальный идентификатор брокера, поэтому после того, как вы это сделаете, вам нужно быть осторожным, чтобы не было конфликтов между восстановленной базой данных и той, которая оставлена ​​в среде разработки.

Когда вы вызывали NEW_BROKER, базе данных был назначен новый уникальный идентификатор брокера, поэтому существующие разговоры обречены (они больше не могут достичь идентификатора целевого брокера).

Вот дополнительная информация об управлении идентификационными данными брокера: MSDN: Управление идентификационными данными сервис-брокера