В настоящее время я разрабатываю приложение, которое использует 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: Управление идентификационными данными сервис-брокера