Partage via


ALTER ROUTE (Transact-SQL)

S’applique à : SQL Server Azure SQL Managed Instance

Modifie les informations relatives à un itinéraire existant dans SQL Server.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

route_name
Nom de l'itinéraire à modifier. Les noms du serveur, de la base de données et du schéma ne peuvent pas être spécifiés.

WITH
Introduit les clauses qui définissent l'itinéraire modifié.

SERVICE_NAME ='service_name'
Spécifie le nom du service distant vers lequel pointe cet itinéraire. service_name doit correspondre exactement au nom utilisé par le service distant. Service Broker utilise une comparaison octet par octet pour la concordance avec la chaîne service_name. En d'autres termes, la comparaison respecte la casse et ne prend pas en compte le classement actuel. Un itinéraire dont le nom de service est « SQL/ServiceBroker/BrokerConfiguration » est un itinéraire vers un service de notification de la configuration de Service Broker. Un itinéraire vers ce service ne peut pas spécifier d'instance de Service Broker.

Si la clause SERVICE_NAME est omise, le nom de service pour l'itinéraire reste le même.

BROKER_INSTANCE ='broker_instance'
Spécifie la base de données qui héberge le service cible. Le paramètre broker_instance doit être l’identificateur de l’instance Service Broker pour la base de données distante et peut être obtenu en exécutant la requête suivante dans la base de données sélectionnée :

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

Si la clause BROKER_INSTANCE est omise, l'instance de Service Broker pour l'itinéraire reste la même.

Notes

Cette option n'est pas disponible dans une base de données autonome.

LIFETIME =route_lifetime
Spécifie la durée, en secondes, pendant laquelle SQL Server conserve l'itinéraire dans la table de routage. Lorsque la durée de vie expire, l'itinéraire expire et SQL Server n'en tient plus compte lors de la sélection d'un itinéraire pour une nouvelle conversation. Si cette clause est omise, la durée de vie de l'itinéraire reste la même.

ADDRESS ='next_hop_address'

Pour Azure SQL Managed Instance, ADDRESS doit être local.

Spécifie l'adresse réseau pour cet itinéraire. next_hop_address spécifie une adresse TCP/IP au format suivant :

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

Le port_number spécifié doit correspondre au numéro de port du point de terminaison de Service Broker pour une instance de SQL Server sur l’ordinateur spécifié. Cela peut être obtenu en exécutant la requête ci-après dans la base de données sélectionnée :

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

Si un itinéraire spécifie 'LOCAL' pour le paramètre next_hop_address, le message est remis à un service de l’instance actuelle de SQL Server.

Si un itinéraire spécifie 'TRANSPORT' pour le paramètre next_hop_address, l’adresse réseau est déterminée en fonction de l’adresse réseau spécifiée dans le nom du service. Un itinéraire qui spécifie 'TRANSPORT' peut spécifier un nom de service ou d’instance Service Broker.

Quand next_hop_address est le serveur principal d’une base de données miroir, vous devez également spécifier la clause MIRROR_ADDRESS pour le serveur miroir. Sinon, cet itinéraire ne bascule pas automatiquement sur le serveur miroir.

Notes

Cette option n'est pas disponible dans une base de données autonome.

MIRROR_ADDRESS ='next_hop_mirror_address'
Spécifie l’adresse réseau pour le serveur miroir d’une paire mise en miroir dont le serveur principal se trouve à l’adresse next_hop_address. next_hop_mirror_address spécifie une adresse TCP/IP au format suivant :

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

Le port_number spécifié doit correspondre au numéro de port du point de terminaison de Service Broker pour une instance de SQL Server sur l’ordinateur spécifié. Cela peut être obtenu en exécutant la requête ci-après dans la base de données sélectionnée :

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

Si la clause MIRROR_ADDRESS est spécifiée, l'itinéraire doit spécifier les clauses SERVICE_NAME et BROKER_INSTANCE. Un itinéraire qui spécifie 'LOCAL' ou 'TRANSPORT' pour le paramètre next_hop_address ne peut pas spécifier une adresse miroir.

Notes

Cette option n'est pas disponible dans une base de données autonome.

Notes

La table de routage qui stocke les itinéraires est une table de métadonnées consultable dans la vue de catalogue sys.routes. La mise à jour de la table de routage s'effectue uniquement au moyen des instructions CREATE ROUTE, ALTER ROUTE et DROP ROUTE.

Les clauses qui ne sont pas spécifiées dans la commande ALTER ROUTE restent inchangées. Par conséquent, il n'est pas possible de MODIFIER un itinéraire pour spécifier que ce dernier n'expire pas, qu'il correspond à n'importe quel nom de service ou à n'importe quelle instance de Service Broker. Pour modifier ces caractéristiques d'un itinéraire, vous devez supprimer l'itinéraire existant et en créer un nouveau avec les informations mises à jour.

Si un itinéraire spécifie 'TRANSPORT' pour le paramètre next_hop_address, l’adresse réseau est déterminée en fonction du nom du service. SQL Server traite les noms de services qui commencent par une adresse réseau dans un format valide pour next_hop_address. Les services dont les noms contiennent des adresses réseau valides seront acheminés vers l'adresse réseau spécifiée dans le nom de service.

La table de routage peut contenir un nombre illimité d'itinéraires qui spécifient les mêmes service, adresse réseau et/ou identificateur d'instance de Service Broker. Dans ce cas, Service Broker sélectionne un itinéraire à l'aide d'une procédure conçue pour rechercher la correspondance la plus précise entre les informations spécifiées dans la conversation et celles de la table de routage.

L'instruction ALTER AUTHORIZATION permet de modifier l'AUTORISATION pour un service.

Autorisations

L’autorisation de modification d’un itinéraire revient par défaut au propriétaire de l’itinéraire, aux membres du rôle de base de données fixe db_ddladmin ou db_owner et aux membres du rôle serveur fixe sysadmin.

Exemples

R. Modification du service d'un itinéraire

L'exemple suivant l'itinéraire ExpenseRoute et le fait pointer vers le service distant //Adventure-Works.com/Expenses.

ALTER ROUTE ExpenseRoute  
   WITH   
     SERVICE_NAME = '//Adventure-Works.com/Expenses';  

B. Modification de la base de données cible d'un itinéraire

L'exemple suivant change la base de données cible de l'itinéraire ExpenseRoute en base de données identifiée par l'identificateur unique D8D4D268-00A3-4C62-8F91-634B89B1E317..

ALTER ROUTE ExpenseRoute  
   WITH   
     BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89B1E317';  

C. Modification de l'adresse d'un itinéraire

L'exemple suivant change l'adresse réseau de l'itinéraire ExpenseRoute en port TCP 1234 sur l'hôte dont l'adresse IP est 10.2.19.72.

ALTER ROUTE ExpenseRoute   
   WITH   
     ADDRESS = 'TCP://10.2.19.72:1234';  

D. Modification de la base de données et de l'adresse d'un itinéraire

L'exemple suivant change l'adresse réseau de l'itinéraire ExpenseRoute en port TCP 1234 sur l'hôte dont le nom DNS est www.Adventure-Works.com. Il remplace également la base de données cible par la base de données identifiée par l'identificateur unique D8D4D268-00A3-4C62-8F91-634B89B1E317.

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

Voir aussi

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