CREATE ROUTE (Transact-SQL)
Изменения: 15 сентября 2007 г.
Добавляет новый маршрут к таблице маршрутов для текущей базы данных. Для исходящих сообщений компонент Service Broker определяет маршруты, проверяя таблицу маршрутов в локальной базе данных. Для сообщений диалогов, начатых в другом экземпляре, включая пересылаемые сообщения, компонент Service Broker проверяет маршруты в базе данных msdb.
Синтаксические обозначения в Transact-SQL
Синтаксис
CREATE ROUTE route_name
[ AUTHORIZATION owner_name ]
WITH
[ SERVICE_NAME = 'service_name', ]
[ BROKER_INSTANCE = 'broker_instance_identifier' , ]
[ LIFETIME = route_lifetime , ]
ADDRESS = 'next_hop_address'
[ , MIRROR_ADDRESS = 'next_hop_mirror_address' ]
[ ; ]
Аргументы
- route_name
Имя создаваемого маршрута. Новый маршрут создается в текущей базе данных и принадлежит участнику, указанному в предложении AUTHORIZATION. Не могут быть указаны имена сервера, базы данных и схемы. Аргумент route_name должен иметь допустимый тип sysname.
- AUTHORIZATION owner_name
Устанавливает заданного пользователя или роль базы данных в качестве владельца маршрута. Аргумент owner_name может быть именем любого допустимого пользователя или роли, если текущий пользователь является членом фиксированной роли базы данных db_owner или фиксированной серверной роли sysadmin. В противном случае аргумент owner_name должен быть именем текущего пользователя, именем пользователя, на олицетворение которого у текущего пользователя есть разрешение IMPERSONATE, или именем роли, к которой принадлежит текущий пользователь. Если это предложение опущено, то маршрут принадлежит текущему пользователю.
- WITH
Представляет предложения, которые определяют создаваемый маршрут.
- SERVICE_NAME = 'service_name'
Указывает имя удаленной службы, на которую указывает данный маршрут. Аргумент service_name должен точно совпадать с именем удаленной службы. Компонент Service Broker использует побайтовое сравнение с аргументом service_name. Другими словами, сравнение чувствительно к регистру и не принимает во внимание параметры сортировки, определенные для текущей учетной записи. Если аргумент SERVICE_NAME опущен, этот маршрут соответствует любому имени службы, но имеет более низкий приоритет, чем маршрут с аргументом SERVICE_NAME. Маршрут с именем службы SQL/ServiceBroker/BrokerConfiguration — это маршрут к службе «Уведомление конфигурации брокера». Маршрут к этой службе не может содержать указание экземпляра брокера.
BROKER_INSTANCE = 'broker_instance_identifier'
Указывает базу данных, в которой расположена служба назначения. Аргумент broker_instance_identifier должен являться идентификатором экземпляра брокера для удаленной базы данных. Этот идентификатор можно получить, выполнив следующий запрос в выбранной базе данных:SELECT service_broker_guid FROM sys.databases WHERE database_id = DB_ID()
Если предложение BROKER_INSTANCE опущено, то маршрут соответствует любому экземпляру брокера. Маршрут, соответствующий любому экземпляру брокера, имеет более высокий приоритет соответствия, чем маршрут с явным экземпляром брокера, когда диалог не указывает экземпляр брокера. Для диалогов, указывающих экземпляр брокера, маршрут с экземпляром брокера имеет более высокий приоритет, чем маршрут, соответствующий любому экземпляру брокера.
- LIFETIME **=**route_lifetime
Указывает время в секундах, в течение которого SQL Server хранит маршрут в таблице маршрутизации. По истечении этого времени действие маршрута истекает и SQL Server больше его не рассматривает при выборе маршрута для новых диалогов. Если предложение опущено, то аргумент route_lifetime имеет значение NULL, и срок маршрута никогда не истекает.
ADDRESS ='next_hop_address'
Указывает сетевой адрес для данного маршрута. Аргумент next_hop_address указывает адрес TCP/IP в следующем формате:TCP://{ имя_dns | имя_netbios | ip_адрес } **:**номер_порта
Указанный аргумент номер_порта должен соответствовать номеру порта конечной точки компонента Service Broker экземпляра Service Broker на указанном компьютере. Его можно получить, выполнив в выбранной базе данных следующий запрос:
SELECT tcpe.port FROM sys.tcp_endpoints AS tcpe INNER JOIN sys.service_broker_endpoints AS ssbe ON ssbe.endpoint_id = tcpe.endpoint_id WHERE ssbe.name = N'MyServiceBrokerEndpoint';
Если служба находится на зеркальной базе данных, необходимо также указать MIRROR_ADDRESS для другого экземпляра зеркальной базы данных. В противном случае он не будет учитываться в маршруте.
Если для аргумента next_hop_address указывается значение 'LOCAL', сообщение доставляется службе в текущем экземпляре SQL Server.
Если для аргумента next_hop_address указывается значение 'TRANSPORT', сетевой адрес определяется на основе сетевого адреса, указанного в имени службы. Маршрут, определенный со значением 'TRANSPORT', может не указывать имя службы или экземпляр брокера.
MIRROR_ADDRESS ='next_hop_mirror_address'
Указывает сетевой адрес зеркальной базы данных, если одна зеркальная база данных находится по адресу next_hop_address. Аргумент next_hop_mirror_address указывает адрес TCP/IP в следующем формате:TCP://{ имя_dns | имя_netbios | ip_адрес } **:**номер_порта
Указанный аргумент номер_порта должен соответствовать номеру порта конечной точки компонента Service Broker экземпляра Service Broker на указанном компьютере. Его можно получить, выполнив в выбранной базе данных следующий запрос:
SELECT tcpe.port FROM sys.tcp_endpoints AS tcpe INNER JOIN sys.service_broker_endpoints AS ssbe ON ssbe.endpoint_id = tcpe.endpoint_id WHERE ssbe.name = N'MyServiceBrokerEndpoint';
Если указано предложение MIRROR_ADDRESS, маршрут должен указывать предложения SERVICE_NAME и BROKER_INSTANCE. Для маршрутов с аргументом next_hop_address равным 'LOCAL' или 'TRANSPORT', адрес зеркала указывать нельзя.
Замечания
Таблица маршрутизации, в которой хранятся маршруты, представляет собой таблицу метаданных, данные из которой могут быть получены с помощью представления каталога sys.routes. Это представление каталога может быть обновлено только с помощью инструкций CREATE ROUTE, ALTER ROUTE и DROP ROUTE.
По умолчанию таблица маршрутов в каждой базе данных содержит один маршрут. тот маршрут называется AutoCreatedLocal. Маршрут указывает значение 'LOCAL' для аргумента next_hop_address и соответствует любому имени службы и идентификатору экземпляра брокера.
Если для аргумента next_hop_address указывается значение 'TRANSPORT', сетевой адрес определяется на основе имени службы. SQL Server может успешно обрабатывать имена служб, начинающиеся с сетевого адреса в допустимом для аргумента next_hop_address формате.
Таблица маршрутов может содержать любое количество маршрутов, указывающих одну и ту же службу, сетевой адрес и идентификатор экземпляра брокера. В этих случаях компонент Service Broker выбирает маршрут с помощью процедуры поиска наиболее точного соответствия сведений, указанных в диалоге, данным, содержащимся в таблице маршрутизации. Дополнительные сведения о выборе маршрута компонентом Service Broker см. в разделе Маршрутизация компонента Service Broker.
Компонент Service Broker не удаляет из таблицы маршрутизации маршруты с истекшим сроком действия. Маршрут с истекшим сроком можно активировать с помощью инструкции ALTER ROUTE.
Маршрут не может быть временным объектом. Допускаются имена маршрутов, начинающиеся с символа #, но они являются постоянными объектами.
Разрешения
Разрешение на создание маршрута по умолчанию принадлежит членам фиксированных ролей базы данных db_ddladmin и db_owner, а также членам фиксированной серверной роли sysadmin.
Примеры
A. Создание маршрута TCP/IP с помощью имени DNS
В следующем примере создается маршрут к службе //Adventure-Works.com/Expenses
. Маршрут указывает, что сообщения для этой службы передаются по протоколу TCP на порт 1234
узла, который определяется DNS-именем www.Adventure-Works.com
. Целевой сервер доставляет сообщения по прибытию их на экземпляр брокера, определенный уникальным идентификатором D8D4D268-00A3-4C62-8F91-634B89C1E315
.
CREATE ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses',
BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',
ADDRESS = 'TCP://www.Adventure-Works.com:1234' ;
Б. Создание маршрута TCP/IP с помощью имени NetBIOS
В следующем примере создается маршрут к службе //Adventure-Works.com/Expenses
. Маршрут указывает, что сообщения для этой службы передаются по протоколу TCP на порт 1234
узла, который определяется NetBIOS-именем SERVER02
. По прибытии сообщения целевой сервер SQL Server доставляет его экземпляру базы данных, определенному уникальным идентификатором D8D4D268-00A3-4C62-8F91-634B89C1E315
.
CREATE ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses',
BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',
ADDRESS = 'TCP://SERVER02:1234' ;
В. Создание маршрута TCP/IP с помощью IP-адреса
В следующем примере создается маршрут к службе //Adventure-Works.com/Expenses
. Маршрут указывает, что сообщения для этой службы передаются по протоколу TCP на порт 1234
узла с IP-адресом 192.168.10.2
. По прибытии сообщения целевой сервер SQL Server доставляет его экземпляру брокера, определенному уникальным идентификатором D8D4D268-00A3-4C62-8F91-634B89C1E315
.
CREATE ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses',
BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',
ADDRESS = 'TCP://192.168.10.2:1234' ;
Г. Создание маршрута к брокеру пересылки
В следующем примере создается маршрут к перенаправляющему брокеру на сервере dispatch.Adventure-Works.com
. Поскольку не заданы ни имя службы, ни идентификатор экземпляра брокера, SQL Server использует этот маршрут для служб, маршруты которых не определены. Дополнительные сведения о маршрутизации см. в разделе Маршрутизация компонента Service Broker.
CREATE ROUTE ExpenseRoute
WITH
ADDRESS = 'TCP://dispatch.Adventure-Works.com' ;
Д. Создание маршрута к локальной службе
В следующем примере создается маршрут к службе //Adventure-Works.com/LogRequests
в том же экземпляре, что и маршрут.
CREATE ROUTE LogRequests
WITH
SERVICE_NAME = '//Adventure-Works.com/LogRequests',
ADDRESS = 'LOCAL' ;
Е. Создание маршрута с заданным сроком жизни
В следующем примере создается маршрут к службе //Adventure-Works.com/Expenses
. Срок жизни маршрута равен 259200
секундам, что составляет 72 часа.
CREATE ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses',
LIFETIME = 259200,
ADDRESS = 'TCP://services.Adventure-Works.com:1234' ;
Ж. Создание маршрута к зеркальной базе данных
В следующем примере создается маршрут к службе //Adventure-Works.com/Expenses
. Эта служба размещена на зеркальной базе данных. Одна из зеркальных баз данных расположена по адресу services.Adventure-Works.com:1234
, вторая — по адресу services-mirror.Adventure-Works.com:1234
.
CREATE ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses',
BROKER_INSTANCE = '69fcc80c-2239-4700-8437-1001ecddf933',
ADDRESS = 'TCP://services.Adventure-Works.com:1234',
MIRROR_ADDRESS = 'TCP://services-mirror.Adventure-Works.com:1234' ;
З. Создание маршрута, использующего для маршрутизации имя службы
В следующем примере создается маршрут, который использует имя службы для определения сетевого адреса, на который будут отправляться сообщения. Обратите внимание, что маршрут, указывающий 'TRANSPORT'
в качестве сетевого адреса, имеет более низкий приоритет совпадения, чем другие маршруты.
CREATE ROUTE TransportRoute
WITH ADDRESS = 'TRANSPORT' ;
См. также
Справочник
ALTER ROUTE (Transact-SQL)
DROP ROUTE (Transact-SQL)
EVENTDATA (Transact-SQL)
Другие ресурсы
Маршрутизация компонента Service Broker
Завершение диалога между экземплярами
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия | Журнал |
---|---|
15 сентября 2007 г. |
|