Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure 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)