Сервисный брокер не работает после восстановления базы данных

У вас есть рабочий сервисный брокер, настроенный на сервере, мы находимся в процессе перехода на новый сервер, но я не могу заставить Service Broker настраиваться в новом окне.

Сделали очевидные (для меня) такие вещи, как "Включение брокера" в БД, удаление маршрута, служб, контракта, очередей и даже тип сообщения и повторное их добавление, установив ALTER QUEUE с STATUS ON

SELECT * FROM sys.service_queues

дает мне список очередей, включая мои собственные два, которые отображаются как активированные, получаемые и т.д.

Излишне говорить, что очереди не работают. Когда я бросаю в них сообщения, ничего не происходит, и ничего не выходит.

Любые идеи? Я уверен, что там что-то действительно очевидное, я пропустил...

Ответ 1

Просто в темноте:

ALTER AUTHORIZATION ON DATABASE::[restored db name] TO [sa];

dbo восстановленной базы данных - это SID Windows, который создал db на исходном сервере. Это может быть локальный SID (например, SERVERNAME\user), который не имеет никакого значения на новом сервере. Эта проблема обычно влияет на активированные процедуры и может повлиять на доставку сообщений, обе проблемы происходят из-за невозможности SQL выдавать себя за "dbo". Изменение dbo на допустимый идентификатор SID входа (например, sa) исправит его.

Если это не исправить, вам нужно отследить, куда идут сообщения. Если они остаются в sys.transmission_queue, тогда вы должны проверить передачу_стату. Если они достигают целевой очереди, но активации не происходит, отметьте ERRORLOG. Если они исчезают, это означает, что вы fire-and-forget (SEND следует немедленно END), и поэтому вы удаляете сообщение об ошибке, указывающее причину. В этой статье Диалоговые диалоги по устранению неполадок содержатся дополнительные советы, на которых следует искать.

И последнее, но не менее важное: попробуйте использовать ssbdiagnose.exe.

Ответ 2

В дополнение к ответу Remus, вы также можете проверить свойство BrokerEnabled восстановленного DB. Всякий раз, когда вы восстанавливаете БД, свойство BrokerEnabled восстановленной БД устанавливается на False. По этой причине ничто не войдет в вашу очередь. Чтобы решить эту проблему:

  • щелкните правой кнопкой мыши по восстановленному DB в SSMS > перейти "Свойства" > "Параметры" > Прокрутите страницу вниз до группы "Сервисный брокер" и проверьте значение "Брокер" Enabled ". Если для него установлено значение False, измените его на True и это должен решить вашу проблему.