Compartilhar via


ALTER ROUTE (Transact-SQL)

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

Ícone de vínculo de tópico Convenções da 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 corresponder exatamente ao nome usado pelo serviço remoto. Service Broker 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 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.

    ObservaçãoObservaçã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'
    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.

    ObservaçãoObservaçã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 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.

    ObservaçãoObservaçã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 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 endereço de rede no nome do serviço. O SQL Server pode processar nomes de serviço que começam com um endereço de rede em um formato que é válido para um next_hop_addresscom êxito. 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 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 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 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

Referência

CREATE ROUTE (Transact-SQL)

DROP ROUTE (Transact-SQL)

EVENTDATA (Transact-SQL)