Share via


Implementieren von Ereignisbenachrichtigungen

Zum Implementieren einer Ereignisbenachrichtigung müssen Sie zuerst einen Zieldienst erstellen, der Ereignisbenachrichtigungen empfängt, und dann die Ereignisbenachrichtigung erstellen.

Wichtiger HinweisWichtig

Die Service Broker-Dialogsicherheit sollte für Ereignisbenachrichtigungen konfiguriert werden, die Meldungen an einen Service Broker auf einem Remoteserver senden. Die Dialogsicherheit muss entsprechend dem Modell für die vollständige Sicherheit manuell konfiguriert werden. Weitere Informationen finden Sie unter Dialogsicherheit für Ereignisbenachrichtigungen.

Erstellen des Zieldiensts

Sie müssen keinen Dienst zum Initiieren von Service Broker erstellen, da Service Broker den folgenden speziellen Meldungstyp und Vertrag für Ereignisbenachrichtigungen enthält:

https://schemas.microsoft.com/SQL/Notifications/PostEventNotification

Der Zieldienst, der Ereignisbenachrichtigungen empfängt, muss diesen bereits vorhandenen Vertrag berücksichtigen.

So erstellen Sie einen Zieldienst:

  1. Erstellen Sie eine Warteschlange, in der Meldungen gespeichert werden.

    HinweisHinweis

    Die Warteschlange empfängt den folgenden Meldungstyp: https://schemas.microsoft.com/SQL/Notifications/QueryNotification.

  2. Erstellen Sie einen Dienst für die Warteschlange, der auf den Ereignisbenachrichtigungsvertrag verweist.

  3. Erstellen Sie eine Route für den Dienst, um die Adresse zu definieren, an die Service Broker Meldungen für den Dienst sendet. Für Ereignisbenachrichtigungen, die an einen Dienst in der gleichen Datenbank gerichtet sind, geben Sie ADDRESS = 'LOCAL' an.

    HinweisHinweis

    Das Service Broker-Routing bestimmt den Dienst, der die Benachrichtigungsmeldungen empfängt. Wenn die Ereignisbenachrichtigung an einen Dienst auf einem Remoteserver gerichtet ist, müssen für den Quellserver und den Zielserver Routen definiert sein, damit sichergestellt ist, dass eine bidirektionale Kommunikation stattfindet. Weitere Informationen finden Sie unter Service Broker-Routing.

Das folgende Beispiel erstellt eine Warteschlange, einen Dienst für die Warteschlange und eine Route für den Dienst, um Meldungen aus dem Ereignisbenachrichtigungsvertrag zu verarbeiten:

CREATE QUEUE NotifyQueue ;
GO
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue
(
[https://schemas.microsoft.com/SQL/Notifications/PostEventNotification]
);
GO
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = 'NotifyService',
ADDRESS = 'LOCAL';
GO

Weitere Informationen zum Erstellen von Service Broker-Zieldiensten finden Sie unter Vorteile der Programmierung mit Service Broker.

Erstellen der Ereignisbenachrichtigung

Ereignisbenachrichtigungen werden mithilfe der Transact-SQL CREATE EVENT NOTIFICATION-Anweisung erstellt und mithilfe von DROP EVENT NOTIFICATION gelöscht. Wenn Sie eine Ereignisbenachrichtigung ändern möchten, müssen Sie sie löschen und dann neu erstellen.

Im folgenden Beispiel wird die Ereignisbenachrichtigung mit dem Namen CreateDatabaseNotification erstellt. Diese Ereignisbenachrichtigung sendet eine Meldung zu jedem CREATE_DATABASE-Ereignis, das auf dem Server auftritt, an den NotifyService-Dienst, der zuvor erstellt wurde.

CREATE EVENT NOTIFICATION CreateDatabaseNotification
ON SERVER
FOR CREATE_DATABASE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984' ;
VorsichtshinweisVorsicht

Ereignisbenachrichtigungen erkennen CREATE_SCHEMA-Ereignisse und die <schema_element>-Definitionen von CREATE SCHEMA-Anweisungen als separate Ereignisse. Angenommen, eine Ereignisbenachrichtigung wird für die Ereignisse CREATE_SCHEMA und CREATE_TABLE erstellt, und Sie führen den folgenden Batch aus.

CREATE SCHEMA s

CREATE TABLE t1 (col1 int)

In diesem Fall wird die Ereignisbenachrichtigung zweimal ausgegeben: Einmal beim Auftreten des CREATE_SCHEMA-Ereignisses, und ein zweites Mal beim Auftreten des CREATE_TABLE-Ereignisses. Es wird empfohlen, entweder keine Ereignisbenachrichtigungen für die CREATE_SCHEMA-Ereignisse und gleichzeitig für die <schema_element>-Texte von entsprechenden CREATE SCHEMA-Definitionen zu erstellen, oder Ihre Anwendung so zu programmieren, dass keine nicht erwünschten Ereignisdaten erfasst werden.

So erstellen Sie eine Ereignisbenachrichtigung

So löschen Sie eine Ereignisbenachrichtigung