ALTER ROUTE (Transact-SQL)
Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure
Modifica informações de rota para uma rota existente no SQL Server.
Convenções de sintaxe de Transact-SQL
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 precisa corresponder exatamente ao nome que o serviço remoto usa. O Agente de Serviço usa uma comparação byte a byte para corresponder ao service_name. Em outras palavras, a comparação diferencia maiúsculas de minúsculas e não considera a ordenação atual. Uma rota com o nome de serviço 'SQL/ServiceBroker/BrokerConfiguration' é uma rota para um serviço 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 precisa ser o identificador da 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.
Observação
Essa opção não está disponível em um banco de dados independente.
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. Se essa cláusula for omitida, o tempo de vida da rota permanecerá inalterado.
ADDRESS ='next_hop_address'
Para a Instância Gerenciada de SQL do Azure, ADDRESS
precisa ser local.
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 precisa corresponder ao número da porta do ponto de extremidade do Agente de Serviço 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 o next_hop_address, a mensagem é entregue a um serviço na 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 especificar um nome de serviço ou uma instância do agente.
Quando o next_hop_address for o servidor principal para um espelho de banco de dados, você também deverá especificar o MIRROR_ADDRESS para o servidor espelho. Caso contrário, essa rota não fará failover automaticamente no servidor espelho.
Observação
Essa opção não está disponível em um banco de dados independente.
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 precisa corresponder ao número da porta do ponto de extremidade do Agente de Serviço 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 espelho.
Observação
Essa opção não está disponível em um banco de dados independente.
Comentários
A tabela de roteamento que armazena as rotas é uma tabela de metadados que pode ser lida por meio 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 começam 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 Agente de Serviço escolhe uma rota usando um procedimento criado para encontrar a correspondência mais exata entre as informações especificadas na conversa e as informações da tabela de roteamento.
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 dessa 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 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 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
CREATE ROUTE (Transact-SQL)
DROP ROUTE (Transact-SQL)
EVENTDATA (Transact-SQL)