Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL Managed Instance
Erstellt ein Objekt, das Informationen zu einer Datenbank oder einem Serverereignis an einen Service Broker-Dienst sendet. Ereignisbenachrichtigungen werden nur mithilfe von Transact-SQL-Anweisungen erstellt.
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. Ein Ereignisbenachrichtigungsname muss die Regeln für Bezeichner erfüllen und innerhalb des Bereichs, in dem sie erstellt werden, eindeutig sein: SERVER, , DATABASEoder object_name.
SERVER
Wendet den Bereich der Ereignisbenachrichtigung auf die aktuelle Instanz von SQL Server an. Wenn angegeben, wird die Benachrichtigung ausgelöst, wenn das angegebene Ereignis in der FOR Klausel an einer beliebigen Stelle in der Instanz von SQL Server auftritt.
Hinweis
Diese Option ist in einer enthaltenen Datenbank nicht verfügbar.
DATABASE
Wendet den Bereich der Ereignisbenachrichtigung auf die aktuelle Datenbank an. Wenn angegeben, wird die Benachrichtigung 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 FOR QUEUE_ACTIVATION oder FOR BROKER_QUEUE_DISABLED auch angegeben wird.
queue_name
Der Name der Warteschlange, auf die die Ereignisbenachrichtigung angewendet wird.
queue_name kann nur angegeben werden, wenn QUEUE angegeben wird.
MIT 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).
- Geben Sie denselben Dienst und broker_instance_specifier-Bezeichner an.
- Geben Sie
WITH FAN_INan.
Beispielsweise werden drei Ereignisbenachrichtigungen erstellt. Alle Ereignisbenachrichtigungen geben FOR ALTER_TABLE, WITH FAN_INdie gleiche TO SERVICE Klausel und werden von derselben SID erstellt. Wenn eine ALTER TABLE Anweisung ausgeführt wird, werden die nachrichten, die von diesen drei Ereignisbenachrichtigungen erstellt werden, in einer zusammengeführt. Daher empfängt der Zieldienst nur eine Nachricht bezüglich des Ereignisses.
event_type
Der Name eines Ereignistyps, der bewirkt, dass die Ereignisbenachrichtigung ausgeführt wird.
event_type kann ein Transact-SQL-DDL-Ereignistyp, ein SQL-Ablaufverfolgungsereignistyp oder ein Service Broker-Ereignistyp sein. Eine Liste aller qualifizierenden Transact-SQL-DDL-Ereignistypen finden Sie unter DDL-Ereignisse. Service Broker-Ereignistypen sind QUEUE_ACTIVATION und BROKER_QUEUE_DISABLED. Weitere Informationen finden Sie unter Ereignisbenachrichtigungen.
event_group
Der Name einer vordefinierten Gruppe von Transact-SQL- oder SQL Trace-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 diesen abgedeckten Transact-SQL-Ereignisse und der Bereiche, für die sie definiert werden können, finden Sie unter DDL-Ereignisgruppen.
event_group fungiert auch als Makro, wenn die CREATE EVENT NOTIFICATION Anweisung beendet ist, indem sie die Ereignistypen hinzufügt, die sie der sys.events Katalogansicht abdeckt.
"broker_service"
Gibt den Zieldienst an, der die Ereignisinstanzdaten empfängt. SQL Server öffnet eine oder mehrere Konversationen für den Zieldienst der Ereignisbenachrichtigung. Der Dienst muss denselben SQL Server-Ereignismeldungstyp und Vertrag berücksichtigen, wie sie zum Senden der Nachricht verwendet werden.
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' | 'Aktuelle Datenbank' }
Gibt die Service Broker-Instanz an, für die broker_service aufgelöst wird. Der Wert für einen bestimmten Dienstbroker kann durch Abfragen der service_broker_guid Spalte der sys.databases Katalogansicht abgerufen werden. Wird verwendet 'current database' , um die Dienstbrokerinstanz in der aktuellen Datenbank anzugeben.
'current database' ist ein Zeichenfolgenliteral mit Groß-/Kleinschreibung.
Hinweis
Diese Option ist in einer enthaltenen Datenbank nicht verfügbar.
Bemerkungen
Service Broker beinhaltet einen speziellen Nachrichtentyp und Vertrag für Ereignisbenachrichtigungen. Daher muss kein Dienstbroker erstellt werden, da bereits ein Dienst vorhanden ist, der den folgenden Vertragsnamen angibt: http://schemas.microsoft.com/SQL/Notifications/PostEventNotification
Der Zieldienst, der Ereignisbenachrichtigungen empfängt, muss diesen bereits vorhandenen Vertrag berücksichtigen.
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. Weitere Informationen finden Sie unter Konfigurieren der 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. Ereignisbenachrichtigungen werden nicht durch eine aktion ausgelöst, die in einem Trigger definiert ist, wenn die Transaktion zugesichert oder innerhalb des Triggers zurückgesetzt wird. Da Ablaufverfolgungsereignisse nicht an Transaktionen gebunden sind, werden Ereignisbenachrichtigungen basierend auf Ablaufverfolgungsereignissen gesendet, unabhängig davon, ob die Transaktion, die sie aktiviert, zurückgesetzt 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, die die Benachrichtigung ursprünglich gestartet hat, ist nicht vom Erfolg oder Fehler des Sendens der Ereignisbenachrichtigung betroffen.
Alle Fehler beim Senden einer Ereignisbenachrichtigung werden protokolliert.
Berechtigungen
Zum Erstellen einer Ereignisbenachrichtigung, die für die DatenbankON DATABASE () gilt, ist die Berechtigung in der aktuellen Datenbank erforderlich CREATE DATABASE DDL EVENT NOTIFICATION .
Zum Erstellen einer Ereignisbenachrichtigung für eine DDL-Anweisung, die auf den Server () angewendet wird, ist eine Berechtigung auf dem ServerON SERVER erforderlich CREATE DDL EVENT NOTIFICATION .
Zum Erstellen einer Ereignisbenachrichtigung für ein Ablaufverfolgungsereignis ist die Berechtigung auf dem Server erforderlich CREATE TRACE EVENT NOTIFICATION .
Zum Erstellen einer Ereignisbenachrichtigung, die auf eine Warteschlange festgelegt ist, ist die Berechtigung für die Warteschlange erforderlich ALTER .
Beispiele
Hinweis
In Beispielen A und B ist die GUID in der TO SERVICE 'NotifyService' Klausel (8140a771-3c4b-4479-8ac0-81008ab17984) spezifisch für den Computer, auf dem das Beispiel eingerichtet wurde. In diesem Fall war es der GUID für die AdventureWorks2025-Datenbank.
Zum Kopieren und Ausführen dieser Beispiele müssen Sie diese GUID durch eine GUID von Ihrem Computer und Ihrer SQL Server-Instanz ersetzen. Wie im Abschnitt "Argumente " erläutert, können Sie die "broker_instance_specifier" abrufen, indem Sie die service_broker_guid Spalte der sys.databases Katalogansicht abfragen.
A. Erstellen einer Ereignisbenachrichtigung mit Serverbereich
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 ([http://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';
B. Erstellen einer Ereignisbenachrichtigung mit Datenbankbereich
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 AdventureWorks2025-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, für die der Serverbereich gilt
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';
D: Abrufen von Informationen zu einer Ereignisbenachrichtigung mit Datenbankbereich
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';