CREATE ROUTE (Transact-SQL)

Aplica-se a: SQL ServerAzure SQL Managed Instance

Adiciona uma nova rota à tabela de encaminhamento para a base de dados atual. Para mensagens de saída, o Service Broker determina o encaminhamento verificando a tabela de encaminhamento na base de dados local. Para mensagens em conversas que se originam noutra instância, incluindo mensagens a encaminhar, o Service Broker verifica as rotas na msdb.

Transact-SQL convenções de sintaxe

Syntax

CREATE ROUTE route_name  
[ AUTHORIZATION owner_name ]  
WITH    
   [ SERVICE_NAME = 'service_name', ]  
   [ BROKER_INSTANCE = 'broker_instance_identifier' , ]  
   [ LIFETIME = route_lifetime , ]  
   ADDRESS =  'next_hop_address'  
   [ , MIRROR_ADDRESS = 'next_hop_mirror_address' ]  
[ ; ]  

Arguments

route_name
É o nome da rota a criar. Uma nova rota é criada na base de dados atual e pertence ao principal especificado na AUTHORIZATION cláusula. Nomes de servidores, bases de dados e esquemas não podem ser especificados. O route_name deve ser um nome de sistema válido.

AUTHORIZATION owner_name
Define o proprietário da rota para o utilizador ou papel especificado na base de dados. O owner_name pode ser o nome de qualquer utilizador ou função válida quando o utilizador atual é membro do papel fixo da base de dados db_owner ou do servidor fixo de sysadmin . Caso contrário, owner_name deve ser o nome do utilizador atual, o nome de um utilizador para o qual o utilizador atual tem permissão de IMPERSONAÇÃO, ou o nome de um papel ao qual o utilizador atual pertence. Quando esta cláusula é omitida, a rota pertence ao utilizador atual.

WITH
Introduz as cláusulas que definem a rota que está a ser criada.

SERVICE_NAME = 'service_name'
Especifica o nome do serviço remoto para o qual esta rota aponta. O service_name deve corresponder exatamente ao nome que o serviço remoto utiliza. O Service Broker utiliza uma comparação byte a byte para corresponder à service_name. Por outras palavras, a comparação é sensível a maiúsculas minúsculas e não considera a colação atual. Se o SERVICE_NAME for omitido, esta rota corresponde a qualquer nome de serviço, mas tem prioridade inferior para correspondência do que uma rota que especifica uma SERVICE_NAME. Uma rota com o nome de serviço 'SQL/ServiceBroker/BrokerConfiguration' é uma rota para um serviço de Aviso de Configuração do Broker. Uma rota para este serviço pode não especificar uma instância de corretor.

BROKER_INSTANCE = 'broker_instance_identifier'
Especifica a base de dados que aloja o serviço alvo. O parâmetro broker_instance_identifier deve ser o identificador da instância do corredor para a base de dados remota, que pode ser obtido executando a seguinte consulta na base de dados selecionada:

SELECT service_broker_guid  
FROM sys.databases  
WHERE database_id = DB_ID()  

Quando a cláusula BROKER_INSTANCE é omitida, esta rota corresponde a qualquer instância do corretor. Uma rota que corresponde a qualquer instância de corretor tem prioridade maior para corresponder do que rotas com uma instância de corretor explícita quando a conversa não especifica uma instância de corretora. Para conversas que especificam uma instância de corretor, uma rota com uma instância de corretor tem prioridade superior a uma rota que corresponde a qualquer instância de corretor.

VITALÍCIO= route_lifetime
Especifica o tempo, em segundos, em que o SQL Server mantém a rota na tabela de encaminhamento. No final da vida útil, a rota expira e o SQL Server deixa de considerar a rota ao escolher uma rota para uma nova conversa. Se esta cláusula for omitida, o route_lifetime é NULL e a rota nunca expira.

ENDEREÇO ='next_hop_address'
Para SQL Managed Instance, ADDRESS deve ser local.

Especifica o endereço de rede para esta rota. A 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 de porta do endpoint do Service Broker de uma instância de SQL Server no computador especificado. Isto pode ser obtido executando a seguinte consulta na base de dados selecionada:

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 o serviço está alojado numa base de dados espelhada, deve também especificar a MIRROR_ADDRESS para a outra instância que aloja uma base de dados espelhada. Caso contrário, esta rota não faz failover para o espelho.

Quando uma rota especifica 'LOCAL' para o next_hop_address, a mensagem é entregue a um serviço dentro da instância atual de 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 'TRANSPORTE' pode não especificar um nome de serviço ou instância de corretor.

MIRROR_ADDRESS ='next_hop_mirror_address'
Especifica o endereço de rede para uma base de dados espelhada com uma base de dados espelhada alojada na next_hop_address. A 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 de porta do endpoint do Service Broker de uma instância de SQL Server no computador especificado. Isto pode ser obtido executando a seguinte consulta na base de dados selecionada:

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 a MIRROR_ADDRESS é especificada, a rota deve especificar a cláusula SERVICE_NAME e a cláusula BROKER_INSTANCE. Uma rota que especifica 'LOCAL' ou 'TRANSPORT' para a next_hop_address pode não especificar um endereço espelho.

Observações

A tabela de encaminhamento que armazena as rotas é uma tabela de metadados que pode ser lida através da vista de catálogo sys.routes . Esta vista de catálogo só pode ser atualizada através das CREATE ROUTEinstruções , ALTER ROUTE, e DROP ROUTE .

Por defeito, a tabela de encaminhamento em cada base de dados de utilizador contém uma rota. Esta rota chama-se AutoCreatedLocal. A rota especifica 'LOCAL' para o next_hop_address e corresponde a qualquer nome de serviço e identificador de instância do corretor.

Quando uma rota especifica 'TRANSPORT' para o next_hop_address, o endereço de rede é determinado com base no nome do serviço. SQL Server pode processar com sucesso nomes de serviços que começam com um endereço de rede num formato válido para um next_hop_address.

A tabela de encaminhamento pode conter qualquer número de rotas que especifiquem o mesmo serviço, endereço de rede e identificador de instância do corretor. Neste caso, o Service Broker escolhe uma rota usando um procedimento desenhado para encontrar a correspondência mais exata entre a informação especificada na conversa e a informação na tabela de encaminhamento.

O Service Broker não remove rotas expiradas da tabela de encaminhamento. Uma rota expirada pode ser ativada usando o ALTER ROUTE extrato.

Uma rota não pode ser um objeto temporário. Nomes de rotas que começam por # são permitidos, mas são objetos permanentes.

Permissions

A permissão para criar uma rota corresponde por defeito aos membros do db_ddladmin ou db_owner funções fixas na base de dados e o sysadmin fixo no servidor.

Examples

A. Criação de uma rota TCP/IP usando um nome DNS

O exemplo seguinte cria uma rota para o serviço //Adventure-Works.com/Expenses. A rota especifica que as mensagens para este serviço viajam por TCP até à porta 1234 no host identificado pelo nome www.Adventure-Works.comDNS. O servidor alvo entrega as mensagens à chegada para a instância intermediária identificada pelo identificador D8D4D268-00A3-4C62-8F91-634B89C1E315único.

CREATE ROUTE ExpenseRoute  
    WITH  
    SERVICE_NAME = '//Adventure-Works.com/Expenses',  
    BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',  
    ADDRESS = 'TCP://www.Adventure-Works.com:1234' ;  

B. Criação de uma rota TCP/IP usando um nome NetBIOS

O exemplo seguinte cria uma rota para o serviço //Adventure-Works.com/Expenses. A rota especifica que as mensagens para este serviço viajam por TCP até à porta 1234 no host identificado pelo nome SERVER02NetBIOS. À chegada, o SQL Server de destino entrega a mensagem para a instância da base de dados identificada pelo identificador D8D4D268-00A3-4C62-8F91-634B89C1E315único .

CREATE ROUTE ExpenseRoute  
    WITH   
    SERVICE_NAME = '//Adventure-Works.com/Expenses',  
    BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',  
    ADDRESS = 'TCP://SERVER02:1234' ;  

C. Criação de uma rota TCP/IP usando um endereço IP

O exemplo seguinte cria uma rota para o serviço //Adventure-Works.com/Expenses. A rota especifica que as mensagens para este serviço viajam via TCP para a porta 1234 no host no endereço 192.168.10.2IP . À chegada, o SQL Server alvo entrega a mensagem à instância do broker identificada pelo identificador D8D4D268-00A3-4C62-8F91-634B89C1E315único.

CREATE ROUTE ExpenseRoute  
    WITH  
    SERVICE_NAME = '//Adventure-Works.com/Expenses',  
    BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',  
    ADDRESS = 'TCP://192.168.10.2:1234' ;  

D. Criação de uma rota para um corretor de encaminhamento

O exemplo seguinte cria uma rota para o corretor de encaminhamento no servidor dispatch.Adventure-Works.com. Como tanto o nome do serviço como o identificador da instância do corretor não são especificados, o SQL Server utiliza esta rota para serviços que não têm outra rota definida.

CREATE ROUTE ExpenseRoute  
    WITH  
    ADDRESS = 'TCP://dispatch.Adventure-Works.com' ;   

E. Criação de uma rota para um serviço local

O exemplo seguinte cria uma rota para o serviço //Adventure-Works.com/LogRequests na mesma instância da rota.

CREATE ROUTE LogRequests  
    WITH  
    SERVICE_NAME = '//Adventure-Works.com/LogRequests',  
    ADDRESS = 'LOCAL' ;  

F. Criação de uma rota com uma vida útil especificada

O exemplo seguinte cria uma rota para o serviço //Adventure-Works.com/Expenses. A duração da rota é 259200 de segundos, o que equivale a 72 horas.

CREATE ROUTE ExpenseRoute  
    WITH  
    SERVICE_NAME = '//Adventure-Works.com/Expenses',  
    LIFETIME = 259200,  
    ADDRESS = 'TCP://services.Adventure-Works.com:1234' ;  

G. Criação de uma rota para uma base de dados espelhada

O exemplo seguinte cria uma rota para o serviço //Adventure-Works.com/Expenses. O serviço é alojado numa base de dados que é espelhada. Uma das bases de dados espelhadas está localizada no endereço services.Adventure-Works.com:1234, e a outra base de dados está localizada no endereço services-mirror.Adventure-Works.com:1234.

CREATE ROUTE ExpenseRoute  
    WITH  
    SERVICE_NAME = '//Adventure-Works.com/Expenses',  
    BROKER_INSTANCE = '69fcc80c-2239-4700-8437-1001ecddf933',  
    ADDRESS = 'TCP://services.Adventure-Works.com:1234',   
    MIRROR_ADDRESS = 'TCP://services-mirror.Adventure-Works.com:1234' ;  

H. Criação de uma rota que utilize o nome do serviço para o encaminhamento

O exemplo seguinte cria uma rota que usa o nome do serviço para determinar o endereço de rede para onde enviar a mensagem. Note que uma rota que especifica 'TRANSPORT' como endereço de rede tem prioridade menor para correspondência do que outras rotas.

CREATE ROUTE TransportRoute  
    WITH ADDRESS = 'TRANSPORT' ;  

Ver também

ALTER ROUTE (Transact-SQL)
DROP ROUTE (Transact-SQL)
EVENTDATA (Transact-SQL)