Service Broker не работает после восстановления базы данных - PullRequest
14 голосов
/ 28 мая 2010

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

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

SELECT * FROM sys.service_queues

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

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

Есть идеи? Я уверен, что есть кое-что действительно очевидное, что я пропустил ...

Ответы [ 2 ]

35 голосов
/ 28 мая 2010

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

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

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

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

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

7 голосов
/ 09 января 2014

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

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