Implementieren von Ereignisbenachrichtigungen

Gilt für:SQL Server

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

Wichtig

Service Broker -Dialogsicherheit sollte für Ereignisbenachrichtigungen konfiguriert werden, die Meldungen an einen Service Broker auf einem Remoteserver senden. Die Dialogsicherheit muss manuell entsprechend dem Modell der vollständigen Sicherheit konfiguriert werden.

Erstellen des Zieldiensts

Sie müssen keinen Dienstbroker-initiierenden Dienst erstellen, da der Dienstbroker den folgenden spezifischen Nachrichtentyp 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.

    Hinweis

    Die Warteschlange empfängt den folgenden Meldungstyp: http://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 der Dienstbroker Nachrichten für den Dienst sendet. Für Ereignisbenachrichtigungen, die an einen Dienst in der gleichen Datenbank gerichtet sind, geben Sie ADDRESS = 'LOCAL'an.

    Hinweis

    Das Dienstbrokerrouting bestimmt den Dienst, der die Benachrichtigungen 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.

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  
(  
[http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]  
);  
GO  
CREATE ROUTE NotifyRoute  
WITH SERVICE_NAME = 'NotifyService',  
ADDRESS = 'LOCAL';  
GO  

Erstellen der Ereignisbenachrichtigung

Ereignisbenachrichtigungen werden mithilfe der Transact-SQL CREATE EVENT NOTIFICATION-Anweisung erstellt und mithilfe der DROP EVENT NOTIFICATION-ANWEISUNG verworfen. 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 CreateDatabaseNotificationerstellt. 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' ;  

Achtung

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, dass Sie entweder das Erstellen von Ereignisbenachrichtigungen für die CREATE_SCHEMA Ereignisse und die <schema_element> Texte aller entsprechenden CREATE SCHEMA-Definitionen vermeiden oder Logik in Ihre Anwendung erstellen, um unerwünschte Ereignisdaten zu vermeiden.

So erstellen Sie eine Ereignisbenachrichtigung

So löschen Sie eine Ereignisbenachrichtigung

Weitere Informationen

Abrufen von Informationen zu Ereignisbenachrichtigungen
EVENTDATA (Transact-SQL)