CREATE ROUTE (Transact-SQL)CREATE ROUTE (Transact-SQL)

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2008)nãoBanco de Dados SQL do Microsoft AzurenãoAzure SQL Data Warehouse nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Adiciona uma nova rota à tabela de roteamento para o banco de dados atual.Adds a new route to the routing table for the current database. Por mensagens de saída, o Service BrokerService Broker determina o roteamento verificando a tabela de roteamento no banco de dados local.For outgoing messages, Service BrokerService Broker determines routing by checking the routing table in the local database. Para mensagens em conversas que se originam em outra instância, incluindo mensagens a serem encaminhadas, Service BrokerService Broker verifica as rotas em msdb.For messages on conversations that originate in another instance, including messages to be forwarded, Service BrokerService Broker checks the routes in msdb.

Ícone de link do tópico Convenções da sintaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax


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' ]  
[ ; ]  

ArgumentosArguments

route_nameroute_name
É o nome da rota a ser criada.Is the name of the route to create. Uma rota nova é criada no banco de dados atual e é de propriedade do principal especificado na cláusula AUTHORIZATION.A new route is created in the current database and owned by the principal specified in the AUTHORIZATION clause. Os nomes de servidor, banco de dados e esquema não podem ser especificados.Server, database, and schema names cannot be specified. O route_name deve ser um válido sysname.The route_name must be a valid sysname.

AUTORIZAÇÃO owner_nameAUTHORIZATION owner_name
Define o proprietário da rota para o usuário ou função de banco de dados especificados.Sets the owner of the route to the specified database user or role. O owner_name pode ser o nome de qualquer usuário ou função válida quando o usuário atual é um membro do db_owner função de banco de dados fixa ou sysadmin função de servidor fixa.The owner_name can be the name of any valid user or role when the current user is a member of either the db_owner fixed database role or the sysadmin fixed server role. Caso contrário, owner_name deve ser o nome do usuário atual, o nome de um usuário que o usuário atual tenha a permissão IMPERSONATE ou o nome de uma função ao qual pertence o usuário atual.Otherwise, owner_name must be the name of the current user, the name of a user that the current user has IMPERSONATE permission for, or the name of a role to which the current user belongs. Quando esta cláusula é omitida, a rota pertence ao usuário atual.When this clause is omitted, the route belongs to the current user.

comWITH
Introduz as cláusulas que definem a rota que é criada.Introduces the clauses that define the route being created.

SERVICE_NAME = 'service_name'SERVICE_NAME = 'service_name'
Especifica o nome do serviço remoto ao qual essa rota aponta.Specifies the name of the remote service that this route points to. O service_name deve corresponder exatamente ao nome de serviço remoto utiliza.The service_name must exactly match the name the remote service uses. Service BrokerService Brokerusa uma comparação byte por byte para corresponder a service_name. uses a byte-by-byte comparison to match the service_name. Em outras palavras, a comparação diferencia maiúsculas de minúsculas e não considera o agrupamento atual.In other words, the comparison is case sensitive and does not consider the current collation. Se o SERVICE_NAME for omitido, essa rota corresponderá a qualquer nome de serviço, mas terá uma prioridade menor para correspondência que uma rota que especifique um SERVICE_NAME.If the SERVICE_NAME is omitted, this route matches any service name, but has lower priority for matching than a route that specifies a SERVICE_NAME. Uma rota com um nome de serviço de ' SQL/ServiceBroker/BrokerConfiguration' é uma rota para um serviço Broker Configuration Notice.A route with a service name of 'SQL/ServiceBroker/BrokerConfiguration' is a route to a Broker Configuration Notice service. Uma rota para esse serviço pode não especificar uma instância do agente.A route to this service might not specify a broker instance.

BROKER_INSTANCE = 'broker_instance_identifier'BROKER_INSTANCE = 'broker_instance_identifier'
Especifica o banco de dados que hospeda o serviço de destino.Specifies the database that hosts the target service. O broker_instance_identifier parâmetro deve ser o identificador de instância do agente para o banco de dados remoto, o que pode ser obtido executando a consulta a seguir no banco de dados selecionado:The broker_instance_identifier parameter must be the broker instance identifier for the remote database, which can be obtained by running the following query in the selected database:

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

Quando a cláusula BROKER_INSTANCE é omitida, essa rota corresponde a qualquer instância do agente.When the BROKER_INSTANCE clause is omitted, this route matches any broker instance. Uma rota que corresponde a qualquer instância do agente tem prioridade maior para correspondência do que rotas com uma instância do agente explícita quando a conversa não especifica a instância.A route that matches any broker instance has higher priority for matching than routes with an explicit broker instance when the conversation does not specify a broker instance. Para conversas que especificam uma instância do agente, uma rota com uma instância do agente tem prioridade maior do que uma rota que corresponde a qualquer instância do agente.For conversations that specify a broker instance, a route with a broker instance has higher priority than a route that matches any broker instance.

Tempo de vida = route_lifetimeLIFETIME =route_lifetime
Especifica a hora, em segundos, que o SQL ServerSQL Server retém a rota na tabela de roteamento.Specifies the time, in seconds, that SQL ServerSQL Server retains the route in the routing table. No fim do tempo de vida, a rota expira e o SQL ServerSQL Server não a considera mais ao escolher uma rota para uma nova conversa.At the end of the lifetime, the route expires, and SQL ServerSQL Server no longer considers the route when choosing a route for a new conversation. Se essa cláusula for omitida, o route_lifetime for NULL e a rota nunca expira.If this clause is omitted, the route_lifetime is NULL and the route never expires.

ENDEREÇO ='next_hop_address'ADDRESS ='next_hop_address'
Especifica o endereço de rede para essa rota.Specifies the network address for this route. O next_hop_address Especifica um endereço TCP/IP no seguinte formato:The next_hop_address specifies a TCP/IP address in the following format:

TCP: / /{ dns_name | netbios_name | endereço_IP } : número_da_portaTCP://{ dns_name | netbios_name | ip_address } :port_number

Especificado port_number deve corresponder ao número de porta para o Service BrokerService Broker ponto de extremidade de uma instância do SQL ServerSQL Server no computador especificado.The specified port_number must match the port number for the Service BrokerService Broker endpoint of an instance of SQL ServerSQL Server at the specified computer. Isso pode ser obtido executando a seguinte consulta no banco de dados selecionado:This can be obtained by running the following query in the selected database:

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 é hospedado em um banco de dados espelho, é necessário também especificar o MIRROR_ADDRESS para a outra instância que hospeda um banco de dados espelho.When the service is hosted in a mirrored database, you must also specify the MIRROR_ADDRESS for the other instance that hosts a mirrored database. Caso contrário, essa rota não realizará failover no espelho.Otherwise, this route does not fail over to the mirror.

Quando uma rota especifica 'LOCAL' para o next_hop_address, a mensagem é entregue a um serviço na instância atual do SQL ServerSQL Server.When a route specifies 'LOCAL' for the next_hop_address, the message is delivered to a service within the current instance of SQL ServerSQL 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.When a route specifies 'TRANSPORT' for the next_hop_address, the network address is determined based on the network address in the name of the service. Uma rota que especifica 'TRANSPORT' pode não especificar uma instância do nome ou o agente de serviço.A route that specifies 'TRANSPORT' might not specify a service name or broker instance.

MIRROR_ADDRESS ='next_hop_mirror_address'MIRROR_ADDRESS ='next_hop_mirror_address'
Especifica o endereço de rede para um banco de dados espelhado com um banco de dados espelho hospedado no next_hop_address.Specifies the network address for a mirrored database with one mirrored database hosted at the next_hop_address. O next_hop_mirror_address Especifica um endereço TCP/IP no seguinte formato:The next_hop_mirror_address specifies a TCP/IP address in the following format:

TCP: / /{ dns_name | netbios_name | endereço_IP } : número_da_portaTCP://{ dns_name | netbios_name | ip_address } : port_number

Especificado port_number deve corresponder ao número de porta para o Service BrokerService Broker ponto de extremidade de uma instância do SQL ServerSQL Server no computador especificado.The specified port_number must match the port number for the Service BrokerService Broker endpoint of an instance of SQL ServerSQL Server at the specified computer. Isso pode ser obtido executando a seguinte consulta no banco de dados selecionado:This can be obtained by running the following query in the selected database:

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.When the MIRROR_ADDRESS is specified, the route must specify the SERVICE_NAME clause and the BROKER_INSTANCE clause. Uma rota que especifica 'LOCAL' ou 'TRANSPORT' para o next_hop_address pode não especificar um endereço de espelho.A route that specifies 'LOCAL' or 'TRANSPORT' for the next_hop_address might not specify a mirror address.

ComentáriosRemarks

A tabela de roteamento que armazena as rotas é uma tabela de metadados que pode ser lidos por meio de routes exibição do catálogo.The routing table that stores the routes is a metadata table that can be read through the sys.routes catalog view. Essa exibição do catálogo pode ser atualizada somente pelas instruções CREATE ROUTE, ALTER ROUTE e DROP ROUTE.This catalog view can only be updated through the CREATE ROUTE, ALTER ROUTE, and DROP ROUTE statements.

Por padrão, a tabela de roteamento em cada banco de dados de usuário contém uma rota.By default, the routing table in each user database contains one route. Essa rota é chamada AutoCreatedLocal.This route is named AutoCreatedLocal. A rota especifica 'LOCAL' para o next_hop_address e corresponde a qualquer identificador de instância de nome e o agente de serviço.The route specifies 'LOCAL' for the next_hop_address and matches any service name and broker instance identifier.

Quando uma rota especifica 'TRANSPORT' para o next_hop_address, o endereço de rede é determinado com base no nome do serviço.When a route specifies 'TRANSPORT' for the next_hop_address, the network address is determined based on the name of the service. SQL ServerSQL Serverpode processar com sucesso os nomes de serviço que começam com um endereço de rede em um formato válido para um next_hop_address. can successfully process service names that begin with a network address in a format that is valid for a next_hop_address.

A tabela de roteamento pode conter qualquer quantidade de rotas que especifiquem o mesmo serviço, endereço de rede e identificador de instância do agente.The routing table can contain any number of routes that specify the same service, network address, and broker instance identifier. Nesse caso, o Service BrokerService 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.In this case, Service BrokerService Broker chooses a route using a procedure designed to find the most exact match between the information specified in the conversation and the information in the routing table.

O Service BrokerService Broker não remove rotas expiradas da tabela de roteamento. Service BrokerService Broker does not remove expired routes from the routing table. Uma rota expirada pode se tornar ativa usando a instrução ALTER ROUTE.An expired route can be made active using the ALTER ROUTE statement.

Uma rota não pode ser um objeto temporário.A route cannot be a temporary object. Nomes de rotas que começam com # são permitidos, mas são objetos permanentes.Route names that start with # are allowed, but are permanent objects.

PermissõesPermissions

Permissão para criar uma rota assume como padrão membros do db_ddladmin ou db_owner funções de banco de dados fixas e sysadmin função de servidor fixa.Permission for creating a route defaults to members of the db_ddladmin or db_owner fixed database roles and the sysadmin fixed server role.

ExemplosExamples

A.A. Criando uma rota TCP/IP com o uso de um nome DNSCreating a TCP/IP route by using a DNS name

O exemplo a seguir cria uma rota para o serviço //Adventure-Works.com/Expenses.The following example creates a route to the service //Adventure-Works.com/Expenses. A rota especifica que as mensagens para esse serviço passam pelo TCP na porta 1234 do host identificado com o nome DNS www.Adventure-Works.com.The route specifies that messages to this service travel over TCP to port 1234 on the host identified by the DNS name www.Adventure-Works.com. O servidor de destino entrega as mensagens na chegada para a instância de corretor identificada pelo identificador exclusivo D8D4D268-00A3-4C62-8F91-634B89C1E315.The target server delivers the messages upon arrival to the broker instance identified by the unique identifier D8D4D268-00A3-4C62-8F91-634B89C1E315.

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.B. Criando uma rota TCP/IP com o uso de um nome NetBIOSCreating a TCP/IP route by using a NetBIOS name

O exemplo a seguir cria uma rota para o serviço //Adventure-Works.com/Expenses.The following example creates a route to the service //Adventure-Works.com/Expenses. A rota especifica que as mensagens para esse serviço passam pelo TCP na porta 1234 do host identificado com o nome NetBIOS SERVER02.The route specifies that messages to this service travel over TCP to port 1234 on the host identified by the NetBIOS name SERVER02. Na chegada, o SQL ServerSQL Server de destino entrega a mensagem à instância de banco de dados identificada pelo identificador exclusivo D8D4D268-00A3-4C62-8F91-634B89C1E315.Upon arrival, the target SQL ServerSQL Server delivers the message to the database instance identified by the unique identifier D8D4D268-00A3-4C62-8F91-634B89C1E315.

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

C.C. Criando uma rota TCP/IP com o uso de um endereço IPCreating a TCP/IP route by using an IP address

O exemplo a seguir cria uma rota para o serviço //Adventure-Works.com/Expenses.The following example creates a route to the service //Adventure-Works.com/Expenses. A rota especifica que as mensagens para esse serviço passam pelo TCP na porta 1234 do host identificado com o endereço IP 192.168.10.2.The route specifies that messages to this service travel over TCP to port 1234 on the host at the IP address 192.168.10.2. Na chegada, o SQL ServerSQL Server de destino entrega a mensagem à instância do agente identificada pelo identificador exclusivo D8D4D268-00A3-4C62-8F91-634B89C1E315.Upon arrival, the target SQL ServerSQL Server delivers the message to the broker instance identified by the unique identifier D8D4D268-00A3-4C62-8F91-634B89C1E315.

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.D. Criando uma rota para um agente de encaminhamentoCreating a route to a forwarding broker

O exemplo a seguir cria uma rota para o corretor de encaminhamento no servidor dispatch.Adventure-Works.com.The following example creates a route to the forwarding broker on the server dispatch.Adventure-Works.com. Como o nome de serviço e o identificador de instância do agente não são especificados, o SQL ServerSQL Server usa essa rota para serviços que não têm nenhuma outra rota definida.Because both the service name and the broker instance identifier are not specified, SQL ServerSQL Server uses this route for services that have no other route defined.

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

E.E. Criando uma rota para um serviço localCreating a route to a local service

O exemplo a seguir cria uma rota para o serviço //Adventure-Works.com/LogRequests na mesma instância que a rota.The following example creates a route to the service //Adventure-Works.com/LogRequests in the same instance as the route.

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

F.F. Criando uma rota com um tempo de vida especificadoCreating a route with a specified lifetime

O exemplo a seguir cria uma rota para o serviço //Adventure-Works.com/Expenses.The following example creates a route to the service //Adventure-Works.com/Expenses. O tempo de vida para a rota é de 259200 segundos, que é igual a 72 horas.The lifetime for the route is 259200 seconds, which equates to 72 hours.

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

G.G. Criando uma rota para um banco de dados espelhadoCreating a route to a mirrored database

O exemplo a seguir cria uma rota para o serviço //Adventure-Works.com/Expenses.The following example creates a route to the service //Adventure-Works.com/Expenses. O serviço é hospedado em um banco de dados espelho.The service is hosted in a database that is mirrored. Um dos bancos de dados espelhados está localizado no endereço services.Adventure-Works.com:1234 e o outro, no endereço services-mirror.Adventure-Works.com:1234.One of the mirrored databases is located at the address services.Adventure-Works.com:1234, and the other database is located at the address 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.H. Criando uma rota que usa o nome do serviço para roteamentoCreating a route that uses the service name for routing

O exemplo a seguir cria uma rota que usa o nome de serviço para determinar o endereço de rede ao qual a mensagem será enviada.The following example creates a route that uses the service name to determine the network address to send the message to. Observe que uma rota que especifica 'TRANSPORT' como o endereço de rede tem prioridade menor de correspondência que outras rotas.Notice that a route that specifies 'TRANSPORT' as the network address has lower priority for matching than other routes.

CREATE ROUTE TransportRoute  
    WITH ADDRESS = 'TRANSPORT' ;  

Consulte tambémSee Also

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