Partilhar via


ALTER ROUTE (Transact-SQL)

Modifica informações de rota para uma rota existente.

Ícone de vínculo de tópicoConvenções de sintaxe 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 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'