Управление идентификационными данными компонента Service Broker

Каждая база данных хранит уникальный идентификатор, используемый для маршрутизации отправляемых ей сообщений компонента Service Broker. В этом разделе описываются идентификационные данные брокера, предотвращение доставки сообщений неверному адресату и параметры управления идентификационными данными брокера.

Идентификаторы компонента Service Broker

Каждая база данных содержит идентификатор компонента Service Broker. Идентификатор компонента Service Broker каждой базы данных экземпляра SQL Server выводится в столбце service_broker_guid представления sys.databases. Механизм маршрутизации сообщений компонента Service Broker использует этот идентификатор для того, чтобы гарантировать доставку всех сообщений диалога одной и той же базе данных. Таким образом, идентификатор компонента Service Broker должен быть уникальным среди всех баз данных, относящихся к одной сети. В противном случае сообщения могут быть доставлены неверному адресату.

Доставка сообщений компонента Service Broker

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

Отключение доставки сообщений компонента Service Broker позволяет безопасно использовать резервную копию базы данных с целью устранения проблем или восстановления данных, исключая риск доставки сообщений неверным адресатам. Сведения о текущем состоянии доставки сообщений компонентом Service Broker для каждой базы данных выводятся в столбце is_broker_enabled представления sys.databases.

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

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

Управление идентификаторами и доставкой сообщений

Команды CREATE DATABASE, ALTER DATABASE и RESTORE DATABASE поддерживают параметры активации доставки сообщений компонента Service Broker и изменения соответствующего базе данных идентификатора компонента Service Broker.

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

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

  • ENABLE_BROKER. Этот параметр включает доставку сообщений компонента Service Broker, сохраняя для базы данных существующий идентификатор компонента Service Broker.
ms166057.note(ru-ru,SQL.90).gifПримечание.
Для включения SQL Server компонента Service Broker в любой базе данных необходима блокировка базы данных. Чтобы включить компонент Service Broker в базе данных msdb, сначала необходимо остановить агент SQL Server, чтобы компонент Service Broker мог получить необходимую блокировку.
  • DISABLE_BROKER. Этот параметр отключает доставку сообщений компонента Service Broker, сохраняя для базы данных существующий идентификатор компонента Service Broker.
  • NEW_BROKER. Этот параметр включает доставку сообщений компонента Service Broker и создает для базы данных новый идентификатор компонента Service Broker. Если задан этот алгоритм, любые диалоги в базе данных завершаются ошибкой, так как в них не используется новый идентификатор экземпляра.
  • ERROR_BROKER_CONVERSATIONS. Этот параметр включает доставку сообщений компонента Service Broker, сохраняя для базы данных существующий идентификатор компонента Service Broker. Все диалоги в базе данных завершаются ошибкой.

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

Дополнительные сведения о параметрах подключения баз данных см. в разделах CREATE DATABASE (Transact-SQL) и ALTER DATABASE (Transact-SQL). Инструкции по активации доставки сообщений компонента Service Broker в базе данных см. в разделе Как активировать доставку сообщений компонента Service Broker в базах данных (Transact-SQL).

См. также

Другие ресурсы

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (Transact-SQL)
RESTORE (Transact-SQL)
sys.databases (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005