ALTER ROUTE (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

Изменяет сведения о маршруте для существующего маршрута в SQL Server.

Соглашения о синтаксисе Transact-SQL

Синтаксис

ALTER ROUTE route_name  
WITH    
  [ SERVICE_NAME = 'service_name' [ , ] ]  
  [ BROKER_INSTANCE = 'broker_instance' [ , ] ]  
  [ LIFETIME = route_lifetime [ , ] ]  
  [ ADDRESS =  'next_hop_address' [ , ] ]  
  [ MIRROR_ADDRESS = 'next_hop_mirror_address' ]  
[ ; ]  
  

Аргументы

route_name
Имя изменяемого маршрута. Не могут быть указаны имена сервера, базы данных и схемы.

ВМЕСТЕ С
Представляет предложения, определяющие изменяемый маршрут.

SERVICE_NAME ='service_name'
Указывает имя удаленной службы, находящейся по этому маршруту. Значение service_name должно точно совпадать с именем, используемым удаленной службой. Service Broker использует сравнение байтов по байтам для сопоставления service_name. Другими словами, при сравнении учитывается регистр и не применяются текущие параметры сортировки. Маршрут с именем службы 'SQL/ServiceBroker/BrokerConfiguration' — это маршрут к службе уведомления конфигурации брокера. В маршруте к этой службе может не указываться экземпляр компонента Service Broker.

Если опущено предложение SERVICE_NAME, имя службы для маршрута не меняется.

BROKER_INSTANCE ='broker_instance'
Указывает базу данных, в которой расположена целевая служба. Параметр broker_instance должен являться идентификатором экземпляра брокера для удаленной базы данных. Этот идентификатор можно получить, выполнив следующий запрос в выбранной базе данных:

SELECT service_broker_guid  
FROM sys.databases  
WHERE database_id = DB_ID();  

Если опущено предложение BROKER_INSTANCE, экземпляр брокера для маршрута не меняется.

Примечание.

Этот параметр недоступен в автономной базе данных.

LIFETIME =route_lifetime
Указывает время в секундах, которое SQL Server сохраняет маршрут в таблице маршрутизации. В конце срока жизни срок действия маршрута истекает, и SQL Server больше не учитывает маршрут при выборе маршрута для нового диалога. Если данное предложение опущено, срок жизни маршрута не меняется.

ADDRESS ='next_hop_address'

Для Управляемого экземпляра SQL Azure аргумент 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';  

Если маршрут указывает "LOCAL" для next_hop_address, сообщение передается службе в текущем экземпляре SQL Server.

Если в аргументе next_hop_address указывается значение 'TRANSPORT', сетевой адрес определяется на основе сетевого адреса, указанного в имени службы. Маршрут со значением 'TRANSPORT' может обозначать имя службы или экземпляр брокера.

Если аргумент next_hop_address является основным сервером для зеркала базы данных, для зеркального сервера также необходимо указать MIRROR_ADDRESS. Иначе данный маршрут не перейдет к зеркальному серверу при отработке отказа автоматически.

Примечание.

Этот параметр недоступен в автономной базе данных.

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.

Предложения, не указанные в команде ALTER ROUTE, остаются неизменными. Таким образом, инструкция ALTER не может быть использована для указания того, что маршрут не блокируется по времени, что он соответствует какому-либо имени службы или экземпляру брокера. Чтобы изменить эти параметры маршрута, необходимо удалить существующий маршрут и создать новый с обновленными сведениями.

Если в аргументе next_hop_address указывается значение 'TRANSPORT', сетевой адрес определяется на основе сетевого адреса, указанного в имени службы. SQL Server может успешно обрабатывать имена служб, начинающиеся с сетевого адреса в формате, допустимом для next_hop_address. Службы с именами, содержащими действительные сетевые адреса, создадут маршрут к сетевому адресу в имени службы.

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

Чтобы изменить свойство AUTHORIZATION для службы, используйте инструкцию ALTER AUTHORIZATION.

Разрешения

Разрешение на изменение маршрута по умолчанию предоставляется владельцу маршрута, членам предопределенной роли базы данных db_ddladmin или db_owner и членам предопределенной роли сервера sysadmin.

Примеры

А. Изменение службы для маршрута

В следующем примере маршрут ExpenseRoute изменяется таким образом, чтобы указывать на удаленную службу //Adventure-Works.com/Expenses.

ALTER ROUTE ExpenseRoute  
   WITH   
     SERVICE_NAME = '//Adventure-Works.com/Expenses';  

B. Изменение целевой базы данных для маршрута

В следующем примере целевая база данных для маршрута ExpenseRoute изменяется на базу данных, определяемую уникальным идентификатором D8D4D268-00A3-4C62-8F91-634B89B1E317.

ALTER ROUTE ExpenseRoute  
   WITH   
     BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89B1E317';  

C. Изменение адреса маршрута

В следующем примере сетевой адрес для маршрута ExpenseRoute к порту TCP 1234 на узле изменяется на IP-адрес 10.2.19.72.

ALTER ROUTE ExpenseRoute   
   WITH   
     ADDRESS = 'TCP://10.2.19.72:1234';  

D. Изменение базы данных и адреса маршрута

В следующем примере сетевой адрес маршрута ExpenseRoute меняется на TCP-порт 1234 на узле с DNS-именем www.Adventure-Works.com. Кроме того, целевая база данных заменяется на базу данных, определяемую уникальным идентификатором D8D4D268-00A3-4C62-8F91-634B89B1E317.

ALTER ROUTE ExpenseRoute  
   WITH   
     BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89B1E317',  
     ADDRESS = 'TCP://www.Adventure-Works.com:1234';  

См. также

CREATE ROUTE (Transact-SQL)
DROP ROUTE (Transact-SQL)
EVENTDATA (Transact-SQL)