CREATE EVENT NOTIFICATION (Transact-SQL)

Aktualisiert: 15. September 2007

Erstellt ein Objekt, das Informationen über eine Datenbank oder ein Serverereignis an einen Service Broker-Dienst sendet. Ereignisbenachrichtigungen werden nur mithilfe von Transact-SQL-Anweisungen erstellt.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

CREATE EVENT NOTIFICATION event_notification_name 
ON { SERVER | DATABASE | QUEUE queue_name } 
[ WITH FAN_IN ]
FOR { event_type | event_group } [ ,...n ]
TO SERVICE 'broker_service' , { 'broker_instance_specifier' | 'current database' }
[ ; ]

Argumente

  • event_notification_name
    Der Name der Ereignisbenachrichtigung. Der Name der Ereignisbenachrichtigung muss den Regeln für Bezeichner entsprechen und innerhalb seines Bereichs (SERVER, DATABASE oder object_name) eindeutig sein.
  • SERVER
    Wendet den Bereich der Ereignisbenachrichtigung auf die aktuelle Instanz von SQL Server an. Ist dieser Bereich angegeben, wird die Benachrichtigung jedes Mal ausgelöst, wenn das angegebene Ereignis in der FOR-Klausel irgendwo in der Instanz von SQL Server auftritt.
  • DATABASE
    Wendet den Bereich der Ereignisbenachrichtigung auf die aktuelle Datenbank an. Ist dieser Bereich angegeben, wird die Benachrichtigung jedes Mal ausgelöst, wenn das angegebene Ereignis in der FOR-Klausel in der aktuellen Datenbank auftritt.
  • QUEUE
    Wendet den Bereich der Benachrichtigung auf eine bestimmte Warteschlange in der aktuellen Datenbank an. QUEUE kann nur angegeben werden, wenn auch FOR QUEUE_ACTIVATION oder FOR BROKER_QUEUE_DISABLED angegeben ist.
  • queue_name
    Der Name der Warteschlange, für die die Ereignisbenachrichtigung gilt. queue_name kann nur angegeben werden, wenn QUEUE angegeben ist.
  • WITH FAN_IN
    Weist SQL Server an, nur eine Nachricht pro Ereignis an einen beliebigen angegebenen Dienst zu senden, wenn für Ereignisbenachrichtigungen Folgendes gilt:

    • Sie werden für dasselbe Ereignis erstellt.
    • Sie werden vom selben Prinzipal erstellt (erkennbar an der identischen Sicherheits-ID).
    • Sie geben denselben Dienst und broker_instance_specifier an.
    • Sie geben WITH FAN_IN an.

    Beispielsweise werden drei Ereignisbenachrichtigungen erstellt. Bei allen Ereignisbenachrichtigungen wird FOR ALTER_TABLE, WITH FAN_IN und dieselbe TO SERVICE-Klausel angegeben, und alle werden von derselben SID erstellt. Wenn eine ALTER TABLE-Anweisung ausgeführt wird, werden die durch diese drei Ereignisbenachrichtigungen erstellten Nachrichten in eine Nachricht zusammengeführt. Daher empfängt der Zieldienst nur eine Nachricht bezüglich des Ereignisses.

  • event_group
    Der Name einer vordefinierten Gruppe von Transact-SQL- oder SQL-Ablaufverfolgungs-Ereignistypen. Eine Ereignisbenachrichtigung kann nach der Ausführung eines beliebigen Ereignisses ausgelöst werden, das zu einer Ereignisgruppe gehört. Eine Liste der DDL-Ereignisgruppen, der von ihnen abgedeckten Transact-SQL-Ereignisse und der Bereiche, für die sie definiert werden können, finden Sie unter DDL-Ereignisgruppen zum Verwenden mit Ereignisbenachrichtigungen. Eine Liste von Ablaufverfolgungs-Ereignisgruppen und der von ihnen abgedeckten Ablaufverfolgungsereignisse finden Sie unter Ablaufverfolgungsereignisgruppen zum Verwenden mit Ereignisbenachrichtigungen.

    event_group fungiert außerdem als Makro, indem dieser Parameter beim Abschließen der CREATE EVENT NOTIFICATION-Anweisung die betroffenen Ereignistypen der sys.events-Katalogsicht hinzufügt.

  • 'broker_service'
    Gibt den Zieldienst an, der die Ereignisinstanzdaten erhält. SQL Server öffnet eine oder mehrere Konversationen mit dem Zieldienst für die Ereignisbenachrichtigung. Der Dienst muss denselben SQL Server-Ereignismeldungstyp und Vertrag berücksichtigen, wie sie zum Senden der Nachricht verwendet werden. Weitere Informationen finden Sie unter Creating Service Broker Services.

    Die Konversationen bleiben geöffnet, bis die Ereignisbenachrichtigung gelöscht wird. Bestimmte Fehler können dazu führen, dass Konversationen früher geschlossen werden. Das explizite Beenden einiger oder aller Konversationen kann verhindern, dass der Zieldienst weitere Nachrichten empfängt.

  • { 'broker_instance_specifier' | 'current database' }
    Gibt die Service Broker-Instanz an, für die broker_service aufgelöst wird. Der Wert für einen bestimmten Service Broker kann durch Abfragen der service_broker_guid-Spalte der sys.databases-Katalogsicht ermittelt werden. Verwenden Sie 'current database', um die Service Broker-Instanz in der aktuellen Datenbank anzugeben. 'current database' ist ein Zeichenfolgenliteral, das nicht nach Groß-/Kleinschreibung unterscheidet.

Hinweise

Service Broker beinhaltet einen speziellen Nachrichtentyp und Vertrag für Ereignisbenachrichtigungen. Es muss also kein initiierender Dienst für Service Broker erstellt werden; dieser ist bereits vorhanden und gibt den folgenden Vertragsnamen an: https://schemas.microsoft.com/SQL/Notifications/PostEventNotification

Der Zieldienst, der Ereignisbenachrichtigungen empfängt, muss diesen bereits vorhandenen Vertrag berücksichtigen. Weitere Informationen zum Erstellen von Service Broker-Zieldiensten finden Sie unter Introduction to Service Broker Programming.

ms189453.note(de-de,SQL.90).gifWichtig:
Für Ereignisbenachrichtigungen, die Nachrichten an eine Service Broker-Instanz auf einem Remoteserver senden, sollte die Dialogsicherheit von Service Broker konfiguriert werden. Die Dialogsicherheit muss manuell entsprechend dem Modell der vollständigen Sicherheit konfiguriert werden. Weitere Informationen finden Sie unter Dialogsicherheit für Ereignisbenachrichtigungen.

Wird für eine Ereignistransaktion, die eine Benachrichtigung aktiviert, ein Rollback ausgeführt, wird das Rollback auch für das Senden der Ereignisbenachrichtigung ausgeführt. Benachrichtigungen werden nicht durch eine in einem Trigger definierte Aktion ausgelöst, wenn ein Commit oder Rollback der Transaktion im Trigger ausgeführt wird. Da Ablaufverfolgungsereignisse nicht durch Transaktionen gebunden werden, werden auf Ablaufverfolgungsereignissen basierende Ereignisbenachrichtigungen unabhängig davon gesendet, ob für die Transaktion, durch die sie aktiviert werden, ein Rollback ausgeführt wird.

Wird die Konversation zwischen Server und Zieldienst nach dem Auslösen einer Ereignisbenachrichtigung unterbrochen, wird ein Fehler gemeldet und die Ereignisbenachrichtigung gelöscht.

Die Ereignistransaktion, von der die Benachrichtigung ursprünglich gestartet wurde, wird nicht davon betroffen, ob die Ereignisbenachrichtigung erfolgreich gesendet wurde.

Alle Fehler beim Senden einer Ereignisbenachrichtigung werden protokolliert.

Berechtigungen

Zum Erstellen einer Ereignisbenachrichtigung mit der Datenbank als Bereich (ON DATABASE) ist die CREATE DATABASE DDL EVENT NOTIFICATION-Berechtigung in der aktuellen Datenbank erforderlich.

Zum Erstellen einer Ereignisbenachrichtigung für eine DDL-Anweisung mit dem Server als Bereich (ON SERVER) ist die CREATE DDL EVENT NOTIFICATION-Berechtigung auf dem Server erforderlich.

Zum Erstellen einer Ereignisbenachrichtigung für ein Ablaufverfolgungsereignis ist die CREATE TRACE EVENT NOTIFICATION-Berechtigung auf dem Server erforderlich.

Zum Erstellen einer Ereignisbenachrichtigung mit einer Warteschlange als Bereich ist die ALTER-Berechtigung für die Warteschlange erforderlich.

Beispiele

ms189453.note(de-de,SQL.90).gifHinweis:
In den Beispielen A und B ist die in der TO SERVICE'NotifyService'Klausel ('8140a771-3c4b-4479-8ac0-81008ab17984') angegebene GUID spezifisch für den Computer, auf dem das Beispiel eingerichtet wurde. Für diese Computerinstanz war dies die GUID für die AdventureWorks-Datenbank. Ersetzen Sie diese GUID durch eine GUID von Ihrem Computer und Ihrer SQL Server-Instanz, um diese Beispiele zu kopieren und auszuführen. Wie in der { 'broker_instance_specifier' | 'current database' }-Definition im Abschnitt mit den Argumenten weiter oben beschrieben, können Sie 'broker_instance_specifier' abrufen, indem Sie die service_broker_guid-Spalte der sys.databases-Katalogsicht abfragen.

A. Erstellen einer Ereignisbenachrichtigung mit dem Server als Bereich

Im folgenden Beispiel werden die zum Einrichten eines Zieldiensts mit Service Broker erforderlichen Objekte erstellt. Der Zieldienst verweist auf den Nachrichtentyp und den Vertrag des initiierenden Diensts speziell für Ereignisbenachrichtigungen. Dann wird auf dem Zieldienst eine Ereignisbenachrichtigung erstellt, die eine Benachrichtigung sendet, sobald ein Object_Created-Ablaufverfolgungsereignis auf der Instanz von SQL Server vorliegt.

--Create a queue to receive messages.
CREATE QUEUE NotifyQueue ;
GO
--Create a service on the queue that references
--the event notifications contract.
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue
([https://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);
GO
--Create a route on the service to define the address 
--to which Service Broker sends messages for the service.
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = 'NotifyService',
ADDRESS = 'LOCAL';
GO
--Create the event notification.
CREATE EVENT NOTIFICATION log_ddl1 
ON SERVER 
FOR Object_Created 
TO SERVICE 'NotifyService',
    '8140a771-3c4b-4479-8ac0-81008ab17984' ;

A. Erstellen einer Ereignisbenachrichtigung mit der Datenbank als Bereich

Im folgenden Beispiel wird eine Ereignisbenachrichtigung für denselben Zieldienst wie im vorherigen Beispiel erstellt. Die Ereignisbenachrichtigung wird ausgelöst, nachdem ein ALTER_TABLE-Ereignis in der AdventureWorks-Beispieldatenbank aufgetreten ist.

CREATE EVENT NOTIFICATION Notify_ALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE 'NotifyService',
    '8140a771-3c4b-4479-8ac0-81008ab17984';

C. Abrufen von Informationen zu einer Ereignisbenachrichtigung mit dem Server als Bereich

Im folgenden Beispiel wird die sys.server_event_notifications-Katalogsicht für Metadaten zur Ereignisbenachrichtigung log_ddl1 abgefragt, die mit dem Serverbereich erstellt wurde.

SELECT * FROM sys.server_event_notifications
WHERE name = 'log_ddl1'

C. Abrufen von Informationen zu einer Ereignisbenachrichtigung mit der Datenbank als Bereich

Im folgenden Beispiel wird die sys.event_notifications-Katalogsicht für Metadaten zur Ereignisbenachrichtigung Notify_ALTER_T1 abgefragt, die mit dem Datenbankbereich erstellt wurde.

SELECT * FROM sys.event_notifications
WHERE name = 'Notify_ALTER_T1'

Siehe auch

Verweis

DROP EVENT NOTIFICATION (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.event_notifications (Transact-SQL)
sys.server_event_notifications (Transact-SQL)
sys.events (Transact-SQL)
sys.server_events (Transact-SQL)

Andere Ressourcen

Implementieren von Ereignisbenachrichtigungen

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

05. Dezember 2005

Neuer Inhalt:
  • Der Beschreibung der WITH FAN_IN-Klausel wurde eine Erläuterung hinzugefügt.
  • Ein wichtiger Hinweis, der Benutzer auf ein separates Thema zum Konfigurieren der Dialogsicherheit von Service Broker für Ereignisbenachrichtigungen an Remotezielserver verweist, wurde hinzugefügt.

15. September 2007

Neuer Inhalt:
  • Es wurde ein Hinweis über das Ersetzen der GUID hinzugefügt, wenn der Code in den Beispielen ausgeführt wird.