ALTER ROUTE (Transact-SQL)
Modifica informações de rota para uma rota existente.
Sintaxe
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' ]
[ ; ]
Argumentos
route_name
É o nome da rota a ser alterada. Os nomes de servidor, banco de dados e esquema não podem ser especificados.WITH
Introduz as cláusulas que definem a rota a ser alterada.SERVICE_NAME ='service_name'
Especifica o nome do serviço remoto ao qual essa rota aponta. O service_name deve ter uma correspondência exata com o nome usado pelo serviço remoto. O Service Broker usa uma comparação byte por byte para fazer a correspondência de service_name. Em outras palavras, a comparação diferencia maiúsculas de minúsculas e não considera o agrupamento atual. Uma rota com um nome de serviço de 'SQL/ServiceBroker/BrokerConfiguration' é uma rota para um serviço do Broker Configuration Notice. Uma rota para esse serviço pode não especificar uma instância do agente.Se a cláusula SERVICE_NAME for omitida, o nome de serviço para a rota permanecerá inalterado.
BROKER_INSTANCE ='broker_instance'
Especifica o banco de dados que hospeda o serviço de destino. O parâmetro broker_instance deve ser o identificador de instância do agente para o banco de dados remoto, que pode ser obtido ao executar a seguinte consulta no banco de dados selecionado:SELECT service_broker_guid FROM sys.databases WHERE database_id = DB_ID()
Quando a cláusula BROKER_INSTANCE é omitida, a instância do agente para a rota permanece inalterada.
LIFETIME **=**route_lifetime
Especifica a hora, em segundos, que o SQL Server retém a rota na tabela de roteamento. No fim do tempo de vida, a rota expira e o SQL Server não a considera mais ao escolher uma rota para uma nova conversação. Se essa cláusula for omitida, o tempo de vida da rota permanecerá inalterado.ADDRESS **='**next_hop_address'
Especifica o endereço de rede para essa rota. O next_hop_address especifica um endereço TCP/IP no seguinte formato:TCP:// { dns_name | netbios_name |ip_address } : port_number
O port_number especificado deve corresponder ao número da porta para o ponto de extremidade do Service Broker de uma instância do SQL Server no computador especificado. Isso pode ser obtido executando a seguinte consulta no banco de dados selecionado:
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';
Quando uma rota especifica 'LOCAL' para next_hop_address, a mensagem é entregue a um servidor dentro da instância atual do SQL Server.
Quando uma rota especifica 'TRANSPORT' para o next_hop_address, o endereço de rede é determinado com base no endereço de rede no nome do serviço. Uma rota que especifica 'TRANSPORT' pode não especificar um nome de serviço ou uma instância do agente.
Quando next_hop_address é o servidor principal para um espelho de banco de dados, também é necessário especificar MIRROR_ADDRESS para o servidor espelho. Caso contrário, essa rota não fará failover automaticamente no servidor espelho.
MIRROR_ADDRESS ='next_hop_mirror_address'
Especifica o endereço de rede para o servidor espelho de um par espelhado cujo servidor principal está no next_hop_address. O next_hop_mirror_address especifica um endereço TCP/IP no seguinte formato:TCP://{ dns_name | netbios_name | ip_address } : port_number
O port_number especificado deve corresponder ao número da porta para o ponto de extremidade do Service Broker de uma instância do SQL Server no computador especificado. Isso pode ser obtido executando a seguinte consulta no banco de dados selecionado:
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';
Quando MIRROR_ADDRESS é especificado, a rota deve especificar as cláusulas SERVICE_NAME e BROKER_INSTANCE. Uma rota que especifica 'LOCAL' ou'TRANSPORT' para o next_hop_address pode não especificar um endereço de espelho.
Comentários
A tabela de roteamento que armazena as rotas é uma tabela de metadados que pode ser lida através da exibição do catálogo sys.routes. A tabela de roteamento pode ser atualizada somente pelas instruções CREATE ROUTE, ALTER ROUTE e DROP ROUTE.
As cláusulas que não são especificadas no comando ALTER ROUTE permanecem inalteradas. Portanto, não é possível alterar uma rota com ALTER para especificar que ela não expira, que corresponde a qualquer nome de serviço ou qualquer instância do agente. Para alterar essas características de uma rota, é necessário descartar a rota existente e criar uma nova com as novas informações.
Quando uma rota especifica 'TRANSPORT' para o next_hop_address, o endereço de rede é determinado com base no nome do serviço. O SQL Server pode processar com êxito nomes de serviço que comecem com um endereço de rede em um formato válido para um next_hop_address. Serviços com nomes que contêm endereços de rede válidos serão roteados para o endereço de rede no nome de serviço.
A tabela de roteamento pode conter qualquer quantidade de rotas que especifiquem o mesmo serviço, endereço de rede e/ou identificador de instância do agente. Nesse caso, o Service Broker escolhe uma rota usando um procedimento criado para encontrar a correspondência mais exata entre as informações especificadas na conversação e as informações da tabela de roteamento. Para obter mais informações sobre como o Service Broker escolhe uma rota, consulte Sistema de rede e roteamento do Service Broker.
Para alterar a AUTHORIZATION para um serviço, use a instrução ALTER AUTHORIZATION.
Permissões
A permissão para alterar uma rota assume como padrão o proprietário da rota, os membros das funções de banco de dados fixas db_ddladmin ou db_owner e os membros da função de servidor fixa sysadmin.
Exemplos
A. Alterando o serviço para uma rota
O exemplo a seguir modifica a rota ExpenseRoute para apontar para o serviço remoto //Adventure-Works.com/Expenses.
ALTER ROUTE ExpenseRoute
WITH
SERVICE_NAME = '//Adventure-Works.com/Expenses'
B. Alterando o banco de dados de destino para uma rota
O exemplo a seguir altera o banco de dados de destino para a rota ExpenseRoute ao banco de dados identificado pelo identificador exclusivo D8D4D268-00A3-4C62-8F91-634B89B1E317.
ALTER ROUTE ExpenseRoute
WITH
BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89B1E317'
C. Alterando o endereço para uma rota
O exemplo a seguir altera o endereço de rede para a rota ExpenseRoute à porta TCP 1234 no host com o endereço IP 10.2.19.72.
ALTER ROUTE ExpenseRoute
WITH
ADDRESS = 'TCP://10.2.19.72:1234'
D. Alterando o banco de dados e endereço para uma rota
O exemplo a seguir altera o endereço de rede para a rota ExpenseRoute à porta TCP 1234 no host com o nome DNS www.Adventure-Works.com. Ele também altera o banco de dados de destino para o banco de dados identificado pelo identificador exclusivo D8D4D268-00A3-4C62-8F91-634B89B1E317.
ALTER ROUTE ExpenseRoute
WITH
BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89B1E317',
ADDRESS = 'TCP://www.Adventure-Works.com:1234'
Consulte também