Verwalten von Service Broker-Identitäten

Jede Datenbank enthält einen eindeutigen Bezeichner, der zum Weiterleiten von Service Broker-Nachrichten an diese Datenbank verwendet wird. In diesem Thema werden die Service Broker-Identitäten, der Service Broker-Schutz vor einer fehlerhaften Weiterleitung von Nachrichten sowie die verfügbaren Optionen zum Verwalten von Service Broker-Identitäten beschrieben.

Service Broker-Bezeichner

Jede Datenbank enthält einen Service Broker-Bezeichner, der sie von allen anderen Datenbanken im Netzwerk unterscheidet. In der Spalte service_broker_guid der Katalogsicht sys.databases wird der Service Broker-Bezeichner für jede Datenbank in der Instanz angezeigt. Service Broker-Systeme können so entworfen werden, dass sie mehrere Kopien eines Diensts ausführen. Jede Kopie des Diensts wird in einer separaten Datenbank ausgeführt. Verwenden Sie in einem System mit mehreren Kopien eines Diensts die BROKER_INSTANCE-Klausel der CREATE ROUTE-Anweisung, um eine Route zu einer bestimmten Kopie des Diensts zu erstellen.

Das Service Broker-Routing verwendet den Service Broker-Bezeichner, um zu sicherzustellen, dass alle Nachrichten für eine Konversation derselben Datenbank zugestellt werden. Die BEGIN DIALOG CONVERSATION-Anweisung öffnet eine Konversation mit einem Zieldienst. Wenn eine Konversation erfolgreich geöffnet werden kann, enthält die Bestätigungsnachricht vom Zieldienst den Service Broker-Bezeichner für die Zieldatenbank. Service Broker leitet dann alle Nachrichten für die Konversation an die angegebene Datenbank.

Service Broker-Bezeichner können zur Steuerung des auszuführenden Routingtyps in der TO SERVICE-Klausel der BEGIN DIALOG CONVERSATION-Anweisung angegeben werden.

  • Geben Sie service_broker_guid an, um Konversationen an eine bestimmte Kopie eines Diensts weiterzuleiten. Angenommen, Sie verfügen über drei Kopien eines Diensts in drei Datenbanken im Netzwerk: eine Entwicklungsdatenbank, eine Testdatenbank und eine Produktionsdatenbank. Die BEGIN DIALOG CONVERSATION-Anweisung in jedem System sollte service_broker_guid angeben, damit sichergestellt ist, dass alle Nachrichten in die richtige Datenbank gelangen.

  • Damit Service Broker auf mehreren Kopien eines Diensts einen Lastenausgleich der Konversationen ausführen kann, geben Sie service_broker_guid nicht an. Service Broker trifft dann eine Auswahl zwischen den Routen mit demselben Dienstnamen, wie in der TO SERVICE-Klausel von BEGIN DIALOG CONVERSATION angegeben.

Standardmäßig leitet Service Broker die Konversationen korrekt weiter, wenn es nur eine Kopie eines Diensts in einem Netzwerk gibt. Sie müssen also den Service Broker-Bezeichner nicht in der CREATE ROUTE-Anweisung oder der BEGIN DIALOG CONVERSATION-Anweisung angeben.

Weitere Informationen zum Routenabgleich in Service Broker finden Sie unter Service Broker-Routing.

Zur korrekten Unterstützung der Nachrichtenübermittlung sollte jeder Service Broker-Bezeichner für alle Instanzen von Database Engine (Datenbankmodul) im selben Netzwerk eindeutig sein. Andernfalls werden die Nachrichten möglicherweise fehlgeleitet. Wenn eine neue Datenbank erstellt wird, wird dieser ein neuer Service Broker-Bezeichner zugewiesen, der im Netzwerk eindeutig sein muss. Der Bezeichner wird wiederhergestellt, wenn die Datenbank wiederhergestellt oder angefügt wird. Gehen Sie vorsichtig vor, wenn Sie Datenbanken wiederherstellen und anfügen. Es sollten nicht mehrere Datenbanken vorhanden sein, die aktiv Service Broker-Vorgänge ausführen und dieselben Bezeichner verwenden.

Service Broker-Nachrichtenübermittlung

SQL Server bietet einen Mechanismus zur Deaktivierung der Service Broker-Nachrichtenübermittlung in einer Datenbank, wenn diese denselben Service Broker-Bezeichner wie eine andere Datenbank im selben Netzwerk aufweist. Wenn die Nachrichtenübermittlung in einer Datenbank deaktiviert ist, verbleiben alle Nachrichten, die aus dieser Datenbank gesendet werden, in der Übertragungswarteschlange für die Datenbank. Zudem geht Service Broker davon aus, dass die Dienste in dieser Datenbank nicht zum Empfangen von Nachrichten zur Verfügung stehen. Diese Dienste werden nicht berücksichtigt, wenn das Service Broker-Routing einen Zieldienst in einer Instanz ermittelt.

Die Deaktivierung der Service Broker-Nachrichtenübermittlung ermöglicht Ihnen das sichere Anfügen einer Datenbanksicherungskopie zu Problembehandlungs- oder Datenwiederherstellungszwecken ohne das Risiko von fehlgeleiteten Nachrichten. In der Spalte is_broker_enabled von sys.databases wird der aktuelle Status der Service Broker-Nachrichtenübermittlung für jede Datenbank angezeigt.

Wenn Sie eine Datenbank anfügen oder wiederherstellen, gehen Sie sorgfältig vor, um sicherzustellen, dass nur für eine Datenbank mit einem bestimmten Service Broker-Bezeichner die Nachrichtenübermittlung aktiviert ist. Andernfalls werden Nachrichten möglicherweise fehlgeleitet, und die Verarbeitung für eine Konversation kann in der falschen Kopie der Datenbank auftreten.

Verwalten von Bezeichnern und Nachrichtenübermittlung

Der CREATE DATABASE-Befehl, der ALTER DATABASE-Befehl und der RESTORE DATABASE-Befehl enthalten Optionen, um die Service Broker-Nachrichtenübermittlung zu aktivieren. Zudem enthalten sie Optionen zum Ändern des Service Broker-Bezeichners für eine Datenbank.

Wenn Sie eine Datenbank anfügen oder wiederherstellen, bleiben der Service Broker-Bezeichner und der Nachrichtenübermittlungsstatus standardmäßig unverändert. Normalerweise ändern Sie den Service Broker-Bezeichner nicht in den folgenden Situationen:

  • Beim Wiederherstellen einer Sicherung zu Wiederherstellungszwecken.

  • Beim Konfigurieren eines gespiegelten Paars.

  • Beim Einrichten des Protokollversands für einen Standbyserver. Beim Erstellen einer Datenbankkopie ändern Sie den Instanzbezeichner.

Es gibt vier Optionen zum Verwalten von Bezeichnern und Nachrichtenübermittlung:

  • ENABLE_BROKER. Mit dieser Option wird die Service Broker-Nachrichtenübermittlung aktiviert, und der bereits vorhandene Service Broker-Bezeichner für die Datenbank wird beibehalten.

    HinweisHinweis

    Das Aktivieren von SQL Server Service Broker in einer Datenbank erfordert eine Datenbanksperre. Um Service Broker in der msdb-Datenbank zu aktivieren, beenden Sie zunächst den SQL Server-Agent. So kann Service Broker die erforderliche Sperre erhalten.

  • DISABLE_BROKER. Mit dieser Option wird die Service Broker-Nachrichtenübermittlung deaktiviert, und der bereits vorhandene Service Broker-Bezeichner für die Datenbank wird beibehalten.

  • NEW_BROKER. Mit dieser Option wird die Service Broker-Nachrichtenübermittlung aktiviert, und es wird ein neuer Service Broker-Bezeichner für die Datenbank erstellt. Mit dieser Option werden alle Konversationen in der Datenbank beendet, und für jede Konversation wird ein Fehler zurückgegeben. Der Grund dafür ist, dass diese Konversationen den neuen Bezeichner nicht verwenden. Jede Route, die auf den alten Service Broker-Bezeichner verweist, muss mit dem neuen Bezeichner neu erstellt werden.

  • ERROR_BROKER_CONVERSATIONS. Mit dieser Option wird die Service Broker-Nachrichtenübermittlung aktiviert, und der vorhandene Service Broker-Bezeichner für die Datenbank wird beibehalten. Service Broker beendet alle Konversationen in der Datenbank und gibt für jede Konversation einen Fehler zurück. Diese Option wird in der Regel verwendet, wenn Sie eine Datenbank zu einem anderen Zeitpunkt wiederherstellen müssen als andere Datenbanken, mit denen die Datenbank geöffnete Konversationen teilt. Alle Konversationen in der wiederhergestellten Datenbank müssen mit einem Fehler beendet werden, da diese nun mit den anderen Datenbanken nicht mehr synchron sind. Der Service Broker-Bezeichner wird beibehalten, sodass alle Routen, die auf den Bezeichner verweisen, immer noch gültig sind.

Unabhängig von der angegebenen Option ermöglicht SQL Server nicht, dass für zwei Datenbanken mit demselben Service Broker-Bezeichner die Nachrichtenübermittlung in derselben SQL Server-Instanz aktiviert ist. Wenn Sie eine Datenbank mit demselben Service Broker-Bezeichner wie dem einer bereits vorhandenen Datenbank anfügen, deaktiviert SQL Server die Service Broker-Nachrichtenübermittlung in der Datenbank, die angefügt wird.

Weitere Informationen zu den Optionen zum Anfügen von Datenbanken finden Sie unter CREATE DATABASE (Transact-SQL) und ALTER DATABASE (Transact-SQL). Informationen zum Aktivieren der Service Broker-Nachrichtenübermittlung in einer Datenbank finden Sie unter Vorgehensweise: Aktivieren von Service Broker-Nachrichtenübermittlung in Datenbanken (Transact-SQL).