Gestion des identités Service Broker
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 et les options disponibles pour les gérer, et explique comment Service Broker permet d'éviter un mauvais acheminement des messages.
Identificateur 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 colonne service_broker_guid de l'affichage catalogue sys.databases indique l'identificateur Service Broker de chaque base de données dans 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 disposant de plusieurs copies d'un service, utilisez la clause BROKER_INSTANCE 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 garantir que tous les messages d'une conversation sont 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 avec succès, l'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 clause TO SERVICE de l'instruction BEGIN DIALOG CONVERSATION pour contrôler le type de routage à réaliser :
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 instructions BEGIN DIALOG CONVERSATION de chaque système doivent spécifier service_broker_guid de manière à garantir que tous les messages sont acheminés vers la base de données correcte.
Pour laisser Service Broker équilibrer la charge des conversations entre plusieurs copies d'un service, ne spécifiez pas service_broker_guid. Service Broker choisit alors un itinéraire parmi les itinéraires ayant le même nom de service que le nom spécifié dans la clause TO SERVICE de l'instruction BEGIN DIALOG CONVERSATION.
Par défaut, si un réseau ne contient qu'une seule copie d'un service, Service Broker achemine correctement les conversations. Vous n'avez pas besoin de spécifier l'identificateur Service Broker dans les instructions CREATE ROUTE ou BEGIN DIALOG CONVERSATION.
Pour plus d'informations sur la mise en correspondance d'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, un nouvel identificateur Service Broker qui doit être unique dans le réseau lui est assigné. 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. Plusieurs bases de données actives ne doivent pas effectuer d'opérations Service Broker et utiliser les mêmes identificateurs.
Remise de messages Service Broker
SQL Server propose un mécanisme permettant de désactiver la remise de messages Service Broker dans une base de données si elle possède le même identificateur Service Broker qu'une autre base de données du 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. Par ailleurs, Service Broker considère les services de cette base de données comme indisponibles pour la réception de messages. Ces services sont ignorés lorsque le routage Service Broker repère 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é la sauvegarde d'une base de données dans le cadre d'un dépannage ou d'une récupération de données, sans courir le risque d'un mauvais acheminement des messages. La colonne is_broker_enabled de l'affichage catalogue sys.databases renseigne sur l'état actuel de la remise de messages Service Broker pour chaque base de données.
Lorsque vous attachez ou restaurez une base de données, prenez soin de vérifier que la remise de messages n'est active que sur une seule base de données pourvue d'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.
Gestion des identificateurs et de la remise de messages
Les commandes CREATE DATABASE, ALTER DATABASE et DATABASE RESTORE contiennent des options pour activer la remise de messages Service Broker. Elles contiennent également des options pour modifier l'identificateur Service Broker d'une base de données.
Par défaut, lorsque vous attachez ou restaurez une base de données, l'identificateur Service Broker et le statut de la remise des messages demeurent inchangés. En général, vous ne changez 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. En revanche, vous modifiez cet identificateur si vous effectuez une copie de la base de données.
Il existe quatre options permettant de gérer les identificateurs et la remise de messages :
ENABLE_BROKER. Cette option active la remise de messages Service Broker et conserve l'identificateur Service Broker de la base de données.
[!REMARQUE]
L'activation de SQL ServerService Broker dans une base de données quelconque nécessite un verrou de base de données. Pour activer Service Broker dans la base de données msdb, arrêtez tout d'abord l'Agent SQL Server. Service Broker peut ensuite obtenir le verrou nécessaire.
DISABLE_BROKER. Cette option désactive la remise de messages Service Broker et conserve l'identificateur Service Broker existant de la base de données.
NEW_BROKER. Cette option active la remise de messages Service Broker et crée un identificateur Service Broker pour la base de données. Cette option termine toutes les conversations existantes dans la base de données et retourne une erreur pour chaque conversation. En effet, 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 de messages Service Broker, en conservant l'identificateur Service Broker existant pour la base de données. Service Broker termine 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 être terminées avec une erreur car elles ne sont plus synchronisées avec les autres bases de données. L'identificateur Service Broker est conservé afin que tous les itinéraires qui référencent l'identificateur soient encore valides.
Quelle que soit l'option spécifiée, SQL Server empêche deux bases de données dotées du même identificateur Service Broker d'utiliser la fonction de remise de messages dans la même instance SQL Server. Si vous attachez une base de données qui possède le même identificateur Service Broker que la 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 permettant d'attacher des bases de données, consultez CREATE DATABASE (Transact-SQL) et ALTER DATABASE (Transact-SQL). Pour plus d'informations sur l'activation de la remise de messages Service Broker dans une base de données, consultez Procédure : activer la remise de messages Service Broker dans les bases de données (Transact-SQL).