ALTER ROUTE (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
Имя изменяемого маршрута. Имена сервера, базы данных и схемы не могут быть указаны.WITH
Представляет предложения, определяющие изменяемый маршрут.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'
Указывает сетевой адрес для данного маршрута. Аргумент next_hop_address задает адрес TCP/IP в следующем формате:TCP:// { имя_dns | имя_netbios |ip_адрес } : номер_порта
Указанный аргумент 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';
Если для маршрута в аргументе next_hop_address указывается значение 'LOCAL', сообщение доставляется службе текущего экземпляра 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 | имя_netbios | ip_адрес } : номер_порта
Указанный аргумент 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 производит выбор маршрута при помощи процедуры поиска наиболее точного соответствия сведений, указанных в диалоге, данным, содержащимся в таблице маршрутизации. Дополнительные сведения о выборе маршрута компонентом Service Broker см. в разделе Маршрутизация и работа в сети компонента Service Broker.
Чтобы изменить свойство AUTHORIZATION для службы, используйте инструкцию ALTER AUTHORIZATION.
Разрешения
Разрешение на изменение маршрута по умолчанию предоставляется владельцу маршрута, членам предопределенной роли базы данных db_ddladmin или db_owner и членам предопределенной роли сервера sysadmin.
Примеры
A. Изменение службы для маршрута
В следующем примере маршрут ExpenseRoute изменяется таким образом, чтобы указывать на удаленную службу //Adventure-Works.com/Expenses.
ALTER ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses'
Б. Изменение целевой базы данных для маршрута
В следующем примере целевая база данных для маршрута 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'
Г. Изменение базы данных и адреса маршрута
В следующем примере сетевой адрес маршрута 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'
См. также