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';
В. Изменение адреса маршрута
В следующем примере сетевой адрес для маршрута 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)