CREATE ROUTE (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL Managed Instance

Voegt een nieuwe route toe aan de routeringstabel voor de huidige database. Voor uitgaande berichten bepaalt Service Broker de routering door de routeringstabel in de lokale database te controleren. Voor berichten in gesprekken die in een andere instantie ontstaan, inclusief berichten die doorgestuurd moeten worden, controleert Service Broker de routes in msdb.

Transact-SQL syntaxis-conventies

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
Is de naam van de route die je moet creëren. Er wordt een nieuwe route aangemaakt in de huidige database en is eigendom van de in de AUTHORIZATION clausule gespecificeerde principal. Server-, database- en schemanamen kunnen niet worden gespecificeerd. De route_name moet een geldige systeemnaam zijn.

AUTHORIZATION owner_name
Stelt de eigenaar van de route in op de gespecificeerde databasegebruiker of rol. De owner_name kan de naam zijn van elke geldige gebruiker of rol wanneer de huidige gebruiker lid is van ofwel de db_owner vaste databaserol of de sysadmin vaste serverrol. Anders moet owner_name de naam zijn van de huidige gebruiker, de naam van een gebruiker waarvoor de huidige gebruiker IMPERSONATE-toestemming heeft, of de naam van een rol waartoe de huidige gebruiker behoort. Wanneer deze clausule wordt weggelaten, behoort de route toe aan de huidige gebruiker.

WITH
Introduceert de clausules die de route die wordt aangemaakt definiëren.

SERVICE_NAME = 'service_name'
Specificeert de naam van de externe dienst waarnaar deze route verwijst. De service_name moet exact overeenkomen met de naam die de externe dienst gebruikt. Service Broker gebruikt een byte-voor-byte vergelijking om de service_name te matchen. Met andere woorden, de vergelijking is hoofdlettergevoelig en houdt geen rekening met de huidige collatie. Als de SERVICE_NAME wordt weggelaten, komt deze route overeen met elke servicenaam, maar heeft deze een lagere prioriteit voor matching dan een route die een SERVICE_NAME specificeert. Een route met de servicenaam 'SQL/ServiceBroker/BrokerConfiguration' is een route naar een Broker Configuration Notice-service. Een route naar deze dienst hoeft geen makelaarsinstantie te specificeren.

BROKER_INSTANCE = 'broker_instance_identifier'
Specificeert de database die de doeldienst host. De broker_instance_identifier parameter moet de broker-instantie-identificatie zijn voor de externe database, die kan worden verkregen door de volgende query uit te voeren in de geselecteerde database:

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

Wanneer de BROKER_INSTANCE clausule wordt weggelaten, komt deze route overeen met elke broker-instantie. Een route die overeenkomt met een broker-instantie heeft een hogere prioriteit voor matching dan routes met een expliciete broker-instantie wanneer het gesprek geen broker-instantie specificeert. Voor gesprekken die een broker-instantie specificeren, heeft een route met een broker-instantie een hogere prioriteit dan een route die overeenkomt met een broker-instantie.

LEVENSLANGE =route_lifetime
Specificeert de tijd, in seconden, waarin SQL Server de route in de routeringstabel behoudt. Aan het einde van de levensduur verloopt de route en houdt SQL Server de route niet langer mee bij het kiezen van een route voor een nieuw gesprek. Als deze clausule wordt weggelaten, is de route_lifetime NULL en verloopt de route nooit.

ADRES ='next_hop_address'
Voor SQL Managed Instance ADDRESS moet het lokaal zijn.

Geeft het netwerkadres voor deze route op. De next_hop_address specificeert een TCP/IP-adres in het volgende formaat:

TCP://{ dns_name | netbios_name | ip_address } :port_number

De gespecificeerde port_number moet overeenkomen met het poortnummer van het Service Broker-eindpunt van een instantie van SQL Server op de opgegeven computer. Dit kan worden verkregen door de volgende zoekopdracht uit te voeren in de geselecteerde 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';  

Wanneer de dienst wordt gehost in een gespiegelde database, moet je ook de MIRROR_ADDRESS specificeren voor de andere instantie die een gespiegelde database host. Anders fail-over deze route niet naar de spiegel.

Wanneer een route 'LOCAL' specificeert voor de next_hop_address, wordt het bericht geleverd aan een dienst binnen de huidige instantie van SQL Server.

Wanneer een route 'TRANSPORT' specificeert voor de next_hop_address, wordt het netwerkadres bepaald op basis van het netwerkadres in de naam van de dienst. Een route die 'TRANSPORT' specificeert, hoeft geen servicenaam of broker-instantie te vermelden.

MIRROR_ADDRESS ='next_hop_mirror_address'
Specificeert het netwerkadres voor een gespiegelde database met één gespiegelde database die op het next_hop_address wordt gehost. De next_hop_mirror_address specificeert een TCP/IP-adres in het volgende formaat:

TCP://{ dns_name | netbios_name | ip_address } :port_number

De gespecificeerde port_number moet overeenkomen met het poortnummer van het Service Broker-eindpunt van een instantie van SQL Server op de opgegeven computer. Dit kan worden verkregen door de volgende zoekopdracht uit te voeren in de geselecteerde 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';  

Wanneer de MIRROR_ADDRESS wordt gespecificeerd, moet de route de SERVICE_NAME clausule en de BROKER_INSTANCE clausule specificeren. Een route die 'LOCAL' of 'TRANSPORT' specificeert voor de next_hop_address hoeft geen spiegeladres te specificeren.

Opmerkingen

De routeringstabel die de routes opslaat, is een metadatatabel die kan worden gelezen via de sys.routes catalogusweergave. Deze catalogusweergave kan alleen worden bijgewerkt via de CREATE ROUTE, ALTER ROUTE, en DROP ROUTE statements.

Standaard bevat de routeringstabel in elke gebruikersdatabase één route. Deze route heet AutoCreatedLocal. De route specificeert 'LOCAL' voor de next_hop_address en komt overeen met elke servicenaam en broker-instantie-identificatie.

Wanneer een route 'TRANSPORT' specificeert voor de next_hop_address, wordt het netwerkadres bepaald op basis van de naam van de dienst. SQL Server kan met succes servicenamen verwerken die beginnen met een netwerkadres in een formaat dat geldig is voor een next_hop_address.

De routeringstabel kan elk aantal routes bevatten die dezelfde service, netwerkadres en broker-instantie-identificatie specificeren. In dit geval kiest Service Broker een route met een procedure die is ontworpen om de meest exacte match te vinden tussen de informatie die in het gesprek is gespecificeerd en de informatie in de routeringstabel.

Service Broker verwijdert verlopen routes niet uit de routeringstabel. Een verlopen route kan actief worden gemaakt met behulp van de ALTER ROUTE verklaring.

Een route kan geen tijdelijk object zijn. Routenamen die beginnen met # zijn toegestaan, maar zijn permanente objecten.

Permissions

Toestemming voor het aanmaken van een route is standaard beschikbaar voor leden van de db_ddladmin of db_owner vaste databaserollen en de sysadmin vaste serverrol.

Examples

A. Het aanmaken van een TCP/IP-route door gebruik te maken van een DNS-naam

Het volgende voorbeeld creëert een route naar de dienst //Adventure-Works.com/Expenses. De route specificeert dat berichten naar deze dienst via TCP reizen naar de poort 1234 op de host die is geïdentificeerd door de DNS-naam www.Adventure-Works.com. De doelserver levert de berichten bij aankomst aan de broker-instantie die is geïdentificeerd door de unieke identificatie 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. Een TCP/IP-route aanmaken door gebruik te maken van een NetBIOS-naam

Het volgende voorbeeld creëert een route naar de dienst //Adventure-Works.com/Expenses. De route specificeert dat berichten naar deze dienst via TCP naar de poort 1234 op de host reizen die is geïdentificeerd door de NetBIOS-naam SERVER02. Bij aankomst levert de doel-SQL Server het bericht af aan de database-instantie die is geïdentificeerd door de unieke identificatie 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. Het aanmaken van een TCP/IP-route door gebruik te maken van een IP-adres

Het volgende voorbeeld creëert een route naar de dienst //Adventure-Works.com/Expenses. De route specificeert dat berichten naar deze dienst via TCP naar de poort 1234 op de host op het IP-adres 192.168.10.2gaan. Bij aankomst levert de doel-SQL Server het bericht af aan de broker-instantie die is geïdentificeerd door de unieke identificatie 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. Een route aanmaken naar een doorstuurmakelaar

Het volgende voorbeeld creëert een route naar de forwarding broker op de server dispatch.Adventure-Works.com. Omdat zowel de servicenaam als de broker-instantie-identificatie niet zijn gespecificeerd, gebruikt SQL Server deze route voor services waarvoor geen andere route is gedefinieerd.

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

E. Het creëren van een route naar een lokale dienst

Het volgende voorbeeld maakt een route naar de dienst //Adventure-Works.com/LogRequests aan in dezelfde instantie als de route.

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

F. Een route aanmaken met een bepaalde levensduur

Het volgende voorbeeld creëert een route naar de dienst //Adventure-Works.com/Expenses. De levensduur van de route is 259200 seconden, wat neerkomt op 72 uur.

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

G. Een route naar een gespiegelde database aanmaken

Het volgende voorbeeld creëert een route naar de dienst //Adventure-Works.com/Expenses. De dienst wordt gehost in een database die gespiegeld is. Eén van de gespiegelde databases bevindt zich op het adres services.Adventure-Works.com:1234, en de andere database bevindt zich op het adres 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. Een route aanmaken die de servicenaam gebruikt voor routering

Het volgende voorbeeld maakt een route aan die de servicenaam gebruikt om het netwerkadres te bepalen waar het bericht naartoe gestuurd wordt. Let op dat een route die als netwerkadres wordt gespecificeerd 'TRANSPORT' een lagere prioriteit heeft voor matching dan andere routes.

CREATE ROUTE TransportRoute  
    WITH ADDRESS = 'TRANSPORT' ;  

Zie ook

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