ALTER ROUTE (Transact-SQL)
Изменяет данные о существующем маршруте.
Синтаксические обозначения 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_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';
Если для маршрута в аргументе 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_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'
Б.Изменение целевой базы данных для маршрута
В следующем примере целевая база данных для маршрута 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'