Gérer les identités Service Broker

S’applique à :SQL ServerAzure SQL Managed Instance

Chaque base de données contient un identificateur unique utilisé pour le routage des messages Service Broker vers cette base de données. Cette rubrique décrit les identificateurs Service Broker, comment Service Broker empêche les erreurs de distribution de message et quelles sont les options disponibles pour gérer les identificateurs Service Broker.

Identificateurs Service Broker

Chaque base de données contient un identificateur Service Broker qui le distingue de toutes les autres bases de données du réseau. La service_broker_guid colonne de l’affichage sys.databases catalogue affiche l’identificateur Service Broker pour chaque base de données de l’instance. Les systèmes Service Broker peuvent être conçus pour exécuter plusieurs copies d’un service. Chaque copie du service s'exécute dans une base de données distincte. Dans un système qui a plusieurs copies d’un service, utilisez la BROKER_INSTANCE clause de l’instruction CREATE ROUTE pour créer un itinéraire vers une copie spécifique du service.

Le routage Service Broker utilise l’identificateur Service Broker pour que tous les messages d’une conversation soient remis à la même base de données. L’instruction BEGIN DIALOG CONVERSATION ouvre une conversation avec un service de destination. Si une conversation est ouverte, le message d’accusé de réception du service de destination contient l’identificateur Service Broker de la base de données de destination. Service Broker route ensuite tous les messages de la conversation vers la base de données spécifiée.

Les identificateurs Service Broker peuvent être spécifiés dans la TO SERVICE clause de l’instruction BEGIN DIALOG CONVERSATION pour contrôler le type de routage à effectuer :

  • Pour router les conversations vers une copie spécifique d’un service, spécifiez un service_broker_guid. Par exemple, trois copies d'un service peuvent se trouver dans trois bases de données sur le réseau : une base de données de développement, une base de données de test et une base de données de production. Les BEGIN DIALOG CONVERSATION instructions de chaque système doivent spécifier service_broker_guid pour vous assurer que tous les messages vont à la base de données correcte.

  • Pour permettre à Service Broker d’équilibrer les charges de conversation sur plusieurs copies d’un service, ne spécifiez pas service_broker_guid. Service Broker choisit également parmi les itinéraires portant le même nom de service que celui spécifié dans la TO SERVICE clause de BEGIN DIALOG CONVERSATION.

Par défaut, s’il n’existe qu’une seule copie d’un service dans un réseau, Service Broker achemine correctement les conversations. Vous n’avez pas besoin de spécifier l’identificateur Service Broker dans ou CREATE ROUTE les BEGIN DIALOG CONVERSATION instructions.

Pour plus d’informations sur la correspondance des itinéraires Service Broker, consultez routage Service Broker.

Pour correctement prendre en charge la remise de messages, chaque identificateur Service Broker doit être unique dans toutes les instances du moteur de base de données sur le même réseau. Dans le cas contraire, les messages risquent d'être mal acheminés. Lorsqu’une nouvelle base de données est créée, elle reçoit un nouvel identificateur Service Broker qui doit être unique dans le réseau. L'identificateur est restauré lorsque la base de données est restaurée ou jointe. Soyez prudent lorsque vous restaurez et joignez des bases de données. Vous ne devez pas avoir plusieurs bases de données qui effectuent activement des opérations Service Broker et qui utilisent les mêmes identificateurs.

Remise de messages Service Broker

SQL Server propose un mécanisme pour désactiver la remise de messages Service Broker dans une base de données si elle a le même identificateur Service Broker qu’une autre base de données dans le même réseau. Lorsque la remise de messages est désactivée dans une base de données, tous les messages envoyés depuis cette base de données sont conservés dans la file d'attente de transmission de la base de données. De plus, Service Broker ne considère pas que les services de cette base de données soient disponibles pour recevoir des messages. Ces services ne sont pas pris en compte lorsque le routage Service Broker localise un service de destination dans une instance.

La désactivation de la remise de messages Service Broker vous permet d’attacher en toute sécurité une sauvegarde d’une base de données à des fins de résolution des problèmes ou de récupération de données sans risque de messages mal dirigés. La is_broker_enabled colonne d’affichage de sys.databases l’état actuel de la remise de messages Service Broker pour chaque base de données.

Quand vous attachez ou restaurez une base de données, prenez soin de vérifier qu’une seule base de données a une remise de messages active avec un identificateur Service Broker donné. Dans le cas contraire, des erreurs dans l'acheminement des messages risquent de survenir et le traitement d'une conversation peut ne pas s'exécuter dans le bon exemplaire de la base de données.

Gérer les identificateurs et la remise des messages

La CREATE DATABASE commande, la ALTER DATABASE commande et la RESTORE DATABASE commande contiennent des options pour activer la remise des messages Service Broker. Elles contiennent également des options pour changer l’identificateur Service Broker d’une base de données.

Par défaut, quand vous attachez ou restaurez une base de données, l’identificateur Service Broker et l’état de la remise des messages ne changent pas. En règle générale, vous ne modifiez pas l’identificateur Service Broker dans les situations suivantes :

  • Lorsque vous restaurez une sauvegarde en vue d'une récupération.
  • Lorsque vous configurez une paire mise en miroir.
  • Lorsque vous configurez la copie des journaux de transaction pour un serveur de secours. Lorsque vous effectuez une copie de la base de données, vous modifiez l’identificateur d’instance.

Il existe quatre options permettant de gérer les identificateurs et la remise de messages :

  • ENABLE_BROKER: cette option active la remise des messages Service Broker, préservant l’identificateur Service Broker existant pour la base de données.

    Notes

    L’activation de SQL Server Service Broker dans n’importe quelle base de données nécessite un verrou de base de données. Pour activer Service Broker dans la base de données, arrêtez d’abord msdb SQL Server Agent. Ensuite, Service Broker peut obtenir le verrou nécessaire.

  • DISABLE_BROKER: cette option désactive la remise des messages Service Broker, préservant l’identificateur Service Broker existant pour la base de données.

  • NEW_BROKER: cette option active la remise des messages Service Broker et crée un identificateur Service Broker pour la base de données. Cette option met fin à toutes les conversations existantes dans la base de données et retourne une erreur pour chaque conversation. Cela est dû au fait que ces conversations n’utilisent pas le nouvel identificateur. Tout itinéraire qui fait référence à l'ancien identificateur Service Broker doit être recréé avec le nouvel identificateur.

  • ERROR_BROKER_CONVERSATIONS: cette option active la remise des messages Service Broker, préservant l’identificateur Service Broker existant pour la base de données. Service Broker met fin à toutes les conversations dans la base de données et retourne une erreur pour chaque conversation. Cette option est généralement utilisée lorsque vous devez restaurer une base de données à un point différent dans le temps que d'autres bases de données avec lesquelles elle a des conversations ouvertes. Toutes les conversations de la base de données restaurée doivent se terminer par une erreur, car elles ne sont plus synchronisées avec les autres bases de données. L’identificateur Service Broker est conservé pour que toutes les routes qui référencent l’identificateur soient encore valides.

Quelle que soit l’option spécifiée, SQL Server n’autorise pas deux bases de données qui ont le même identificateur Service Broker pour que la remise des messages soit active dans la même instance de SQL Server. Si vous attachez une base de données qui a le même identificateur Service Broker qu’une base de données existante, SQL Server désactive la remise de messages Service Broker dans la base de données que vous attachez.

Pour plus d’informations sur les options d’attachement de bases de données, consultez CREATE DATABASE et ALTER DATABASE. Pour plus d’informations sur l’activation de la remise de messages Service Broker dans une base de données, consultez Guide pratique pour activer la remise de messages Service Broker dans les bases de données.