Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения: SQL Server Управляемый экземпляр SQL Azure
Добавляет новый маршрут к таблице маршрутов для текущей базы данных. Для исходящих сообщений 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, или именем роли, которой принадлежит текущий пользователь. Если это предложение опущено, то маршрут принадлежит текущему пользователю.
ВМЕСТЕ С
Представляет предложения, которые определяют создаваемый маршрут.
SERVICE_NAME = 'service_name'
Указывает имя удаленной службы, находящейся по этому маршруту. Значение service_name должно точно совпадать с именем, используемым удаленной службой. Service Broker использует сравнение байтов по байтам для сопоставления service_name. Другими словами, при сравнении учитывается регистр и не применяются текущие параметры сортировки. Если аргумент SERVICE_NAME опущен, этот маршрут соответствует любому имени службы, но имеет более низкий приоритет, чем маршрут с аргументом SERVICE_NAME. Маршрут с именем службы 'SQL/ServiceBroker/BrokerConfiguration' — это маршрут к службе уведомления конфигурации брокера. В маршруте к этой службе может не указываться экземпляр компонента Service Broker.
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'
Для Управляемого экземпляра SQL аргумент ADDRESS должен задавать локальный адрес.
Указывает сетевой адрес для данного маршрута. Аргумент next_hop_address задает адрес TCP/IP в следующем формате:
TCP://{ dns_name | netbios_name | ip_address } :port_number
Указанный port_number должен соответствовать номеру порта для конечной точки Service Broker экземпляра SQL Server на указанном компьютере. Его можно получить, выполнив к выбранной базе данных следующий запрос:
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 для другого экземпляра зеркальной базы данных. В противном случае он не будет учитываться в маршруте.
Если маршрут указывает "LOCAL" для next_hop_address, сообщение передается службе в текущем экземпляре SQL Server.
Если в аргументе next_hop_address указывается значение 'TRANSPORT', сетевой адрес определяется на основе сетевого адреса, указанного в имени службы. Маршрут со значением 'TRANSPORT' может не указывать имя службы или экземпляр брокера.
MIRROR_ADDRESS ='next_hop_mirror_address'
Указывает сетевой адрес зеркальной базы данных, если одна зеркальная база данных находится по адресу next_hop_address. Аргумент next_hop_mirror_address задает адрес TCP/IP в следующем формате:
TCP://{ dns_name | netbios_name | ip_address } : port_number
Указанный port_number должен соответствовать номеру порта для конечной точки Service Broker экземпляра SQL Server на указанном компьютере. Его можно получить, выполнив к выбранной базе данных следующий запрос:
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 не удаляет истекшие маршруты из таблицы маршрутизации. Маршрут с истекшим сроком можно активировать с помощью инструкции ALTER ROUTE.
Маршрут не может быть временным объектом. Допускаются имена маршрутов, начинающиеся с символа #, но они являются постоянными объектами.
Разрешения
Разрешение на создание маршрута по умолчанию имеют члены предопределенных ролей базы данных db_ddladmin и db_owner и члены предопределенной роли сервера sysadmin.
Примеры
А. Создание 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' ;
B. Создание 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' ;
D. Создание маршрута к брокеру пересылки
В следующем примере создается маршрут к перенаправляющему брокеру на сервере dispatch.Adventure-Works.com. Так как имя службы и идентификатор экземпляра брокера не указаны, SQL Server использует этот маршрут для служб, у которых нет другого маршрута.
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' ;
F. Создание маршрута с заданным временем существования
В следующем примере создается маршрут к службе //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' ;
G. Создание маршрута к зеркальной базе данных
В следующем примере создается маршрут к службе //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' ;
H. Создание маршрута, использующего для маршрутизации имя службы
В следующем примере создается маршрут, который использует имя службы для определения сетевого адреса, на который будут отправляться сообщения. Обратите внимание, что маршрут, указывающий 'TRANSPORT' в качестве сетевого адреса, имеет более низкий приоритет совпадения, чем другие маршруты.
CREATE ROUTE TransportRoute
WITH ADDRESS = 'TRANSPORT' ;
См. также
ALTER ROUTE (Transact-SQL)
DROP ROUTE (Transact-SQL)
EVENTDATA (Transact-SQL)