EreignisbenachrichtigungenEvent Notifications

GILT FÜR: jaSQL Server neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Mit Ereignisbenachrichtigungen werden Informationen zu Ereignissen an einen Service BrokerService Broker -Dienst gesendet.Event notifications send information about events to a Service BrokerService Broker service. Ereignisbenachrichtigungen werden als Antwort auf eine Vielzahl von Transact-SQLTransact-SQL -DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) und Ereignissen der SQL-Ablaufverfolgung ausgeführt, indem Informationen zu diesen Ereignissen an einen Service BrokerService Broker -Dienst gesendet werden.Event notifications execute in response to a variety of Transact-SQLTransact-SQL data definition language (DDL) statements and SQL Trace events by sending information about these events to a Service BrokerService Broker service.

Ereignisbenachrichtigungen können für die folgenden Aufgaben verwendet werden:Event notifications can be used to do the following:

  • Protokollieren und Prüfen von Änderungen oder Aktivitäten, die für die Datenbank auftreten.Log and review changes or activity occurring on the database.

  • Ausführen einer Aktion als Antwort auf ein Ereignis auf asynchrone statt auf synchrone Weise.Perform an action in response to an event in an asynchronous instead of synchronous manner.

Ereignisbenachrichtigungen können eine Programmieralternative zu DDL-Triggern und zur SQL-Ablaufverfolgung bieten.Event notifications can offer a programming alternative to DDL triggers and SQL Trace.

Vorteile von EreignisbenachrichtigungenEvent Notifications Benefits

Ereignisbenachrichtigungen werden asynchron außerhalb des Bereichs einer Transaktion ausgeführt.Event notifications run asynchronously, outside the scope of a transaction. Im Gegensatz zu DDL-Triggern können Ereignisbenachrichtigungen deshalb in einer Datenbankanwendung als Reaktion auf Ereignisse verwendet werden, ohne Ressourcen zu belegen, die von der unmittelbaren Transaktion definiert werden.Therefore, unlike DDL triggers, event notifications can be used inside a database application to respond to events without using any resources defined by the immediate transaction.

Im Gegensatz zur SQL-Ablaufverfolgung kann mithilfe von Ereignisbenachrichtigungen eine Aktion innerhalb einer SQL ServerSQL Server -Instanz als Antwort auf ein Ereignis der SQL-Ablaufverfolgung ausgeführt werden.Unlike SQL Trace, event notifications can be used to perform an action inside an instance of SQL ServerSQL Server in response to a SQL Trace event.

Ereignisdaten können von Anwendungen, die zusammen mit SQL ServerSQL Server ausgeführt werden, zum Nachverfolgen des Fortschritts sowie zum Treffen von Entscheidungen verwendet werden.Event data can be used by applications that are running together with SQL ServerSQL Server to track progress and make decisions. Die folgende Ereignisbenachrichtigung sendet z. B. bei jeder Ausgabe einer ALTER TABLE -Anweisung in der AdventureWorks2012AdventureWorks2012 -Beispieldatenbank eine Benachrichtigung an einen bestimmten Dienst:For example, the following event notification sends a notice to a certain service every time an ALTER TABLE statement is issued in the AdventureWorks2012AdventureWorks2012 sample database.

USE AdventureWorks2012;  
GO  
CREATE EVENT NOTIFICATION NotifyALTER_T1  
ON DATABASE  
FOR ALTER_TABLE  
TO SERVICE '//Adventure-Works.com/ArchiveService' ,  
    '8140a771-3c4b-4479-8ac0-81008ab17984';  

Konzepte der EreignisbenachrichtigungenEvent Notifications Concepts

Wenn eine Ereignisbenachrichtigung erstellt wird, werden eine oder mehrere Service BrokerService Broker -Konversationen zwischen einer Instanz von SQL ServerSQL Server und dem von Ihnen angegebenen Zieldienst geöffnet.When an event notification is created, one or more Service BrokerService Broker conversations between an instance of SQL ServerSQL Server and the target service you specify are opened. Die Konversationen bleiben in der Regel geöffnet, so lange die Ereignisbenachrichtigung als Objekt für die Serverinstanz vorhanden ist.The conversations typically remain open as long as the event notification exists as an object on the server instance. In einigen Fehlerfällen können die Konversationen geschlossen werden, bevor die Ereignisbenachrichtigung gelöscht wird.In some error cases the conversations can close before the event notification is dropped. Diese Konversationen werden niemals für Ereignisbenachrichtigungen freigegeben.These conversations are never shared between event notifications. Jede Ereignisbenachrichtigung besitzt ihre eigenen, exklusiven Konversationen.Every event notification has its own exclusive conversations. Das explizite Beenden einer Konversation verhindert, dass der Zieldienst weitere Nachrichten empfängt, und die Konversation wird bei der nächsten Auslösung der Ereignisbenachrichtigung nicht erneut geöffnet.Ending a conversation explicitly prevents the target service from receiving more messages, and the conversation will not reopen the next time the event notification fires.

Ereignisinformationen werden an den Service BrokerService Broker -Dienst als Variable des Typs xml übermittelt; diese Variable stellt Informationen zum Zeitpunkt des Auftretens eines Ereignisses, zum betroffenen Datenbankobjekt, zur beteiligten Transact-SQLTransact-SQL -Batchanweisung sowie weitere Informationen bereit.Event information is delivered to the Service BrokerService Broker service as a variable of type xml that provides information about when an event occurs, about the database object affected, the Transact-SQLTransact-SQL batch statement involved, and other information. Weitere Informationen zum XML-Schema, das von Ereignisbenachrichtigungen erstellt wird, finden Sie unter EVENTDATA (Transact-SQL).For more information about the XML schema produced by event notifications, see EVENTDATA (Transact-SQL).

Ereignisbenachrichtigungen im Vergleich zur TriggerEvent Notifications vs. Triggers

In der folgenden Tabelle werden Trigger und Ereignisbenachrichtigungen verglichen und Unterschiede aufgezeigt.The following table compares and contrasts triggers and event notifications.

TriggerTriggers EreignisbenachrichtigungenEvent Notifications
DML-Trigger reagieren auf DML-Ereignisse.DML triggers respond to data manipulation language (DML) events. DDL-Trigger reagieren auf DDL-Ereignisse (Data Definition Language, Datendefinitionssprache).DDL triggers respond to data definition language (DDL) events. Ereignisbenachrichtigungen reagieren auf DDL-Ereignisse und eine Teilmenge von SQL-Ablaufverfolgungsereignissen.Event notifications respond to DDL events and a subset of SQL trace events.
Trigger können verwalteten Transact-SQL- oder CLR-Code (Common Language Runtime) ausführen.Triggers can run Transact-SQL or common language runtime (CLR) managed code. Ereignisbenachrichtigungen führen keinen Code aus.Event notifications do not run code. Sie senden xml -Nachrichten an einen Service Broker-Dienst.Instead, they send xml messages to a Service Broker service.
Trigger werden synchron innerhalb des Bereichs der Transaktionen verarbeitet, die ihre Auslösung bewirken.Triggers are processed synchronously, within the scope of the transactions that cause them to fire. Ereignisbenachrichtigungen können asynchron verarbeitet werden und werden nicht innerhalb des Bereichs der Transaktionen ausgeführt, die ihre Auslösung bewirken.Event notifications may be processed asynchronously and do not run in the scope of the transactions that cause them to fire.
Der Consumer eines Triggers ist eng mit dem Ereignis verkoppelt, das seine Auslösung bewirkt.The consumer of a trigger is tightly coupled with the event that causes it to fire. Der Consumer einer Ereignisbenachrichtigung ist von dem Ereignis entkoppelt, das seine Auslösung bewirkt.The consumer of an event notification is decoupled from the event that causes it to fire.
Trigger müssen auf dem lokalen Server verarbeitet werden.Triggers must be processed on the local server. Ereignisbenachrichtigungen können auf einem Remoteserver verarbeitet werden.Event notifications can be processed on a remote server.
Für Trigger kann ein Rollback durchgeführt werden.Triggers can be rolled back. Für Ereignisbenachrichtigungen kann kein Rollback durchgeführt werden.Event notifications cannot be rolled back.
Die Namen von DML-Triggern stammen aus dem Bereich des Schemas.DML trigger names are schema-scoped. Die Namen von DDL-Triggern stammen aus dem Bereich der Datenbank oder des Servers.DDL trigger names are database-scoped or server-scoped. Die Namen von Ereignisbenachrichtigungen stammen aus dem Bereich des Servers oder der Datenbank.Event notification names are scoped by the server or database. Ereignisbenachrichtigungen für ein QUEUE_ACTIVATION-Ereignis stammen aus dem Bereich einer bestimmten Warteschlange.Event notifications on a QUEUE_ACTIVATION event are scoped to a specific queue.
DML-Trigger weisen den gleichen Besitzer wie die Tabellen auf, auf die sie angewendet werden.DML triggers are owned by the same owner as the tables on which they are applied. Der Besitzer einer Ereignisbenachrichtigung für eine Warteschlange kann einen anderen Besitzer als das Objekt aufweisen, auf das diese angewendet wird.The owner of an event notification on a queue may have a different owner than the object on which it is applied.
Trigger unterstützen die EXECUTE AS-Klausel.Triggers support the EXECUTE AS clause. Ereignisbenachrichtigungen unterstützen die EXECUTE AS-Klausel nicht.Event notifications do not support the EXECUTE AS clause.
Die Ereignisinformationen von DDL-Triggern können mit der EVENTDATA-Funktion aufgezeichnet werden, die einen xml -Datentyp zurückgibt.DDL trigger event information can be captured using the EVENTDATA function, which returns an xml data type. Ereignisbenachrichtigungen senden xml -Ereignisinformationen an einen Service Broker-Dienst.Event notifications send xml event information to a Service Broker service. Die Informationen werden für das gleiche Schema formatiert, das auch die EVENTDATA-Funktion verwendet.The information is formatted to the same schema as that of the EVENTDATA function.
Metadaten zu Triggern sind in den sys.triggers - und sys.server_triggers -Katalogsichten enthalten.Metadata about triggers is found in the sys.triggers and sys.server_triggers catalog views. Metadaten zu Ereignisbenachrichtigungen sind in den sys.event_notifications- und sys.server_event_notifications-Katalogsichten enthalten.Metadata about event notifications is found in the sys.event_notifications and sys.server_event_notifications catalog views.

Ereignisbenachrichtigungen im Vergleich zur SQL-AblaufverfolgungEvent Notifications vs. SQL Trace

Die folgende Tabelle vergleicht das Verwenden von Ereignisbenachrichtigungen mit der SQL-Ablaufverfolgung zum Überwachen von Serverereignissen und führt die jeweiligen Merkmale auf.The following table compares and contrasts using event notifications and SQL Trace for monitoring server events.

SQL-AblaufverfolgungSQL Trace EreignisbenachrichtigungenEvent Notifications
Die SQL-Ablaufverfolgung bewirkt keinen zusätzlichen Verwaltungsaufwand, der auf Transaktionen zurückzuführen ist.SQL Trace generates no performance overhead associated with transactions. Die Verpackung der Daten ist effizient.Packaging of data is efficient. Durch das Erstellen der als XML formatierten Ereignisdaten und Senden der Ereignisbenachrichtigung entsteht zusätzlicher Verwaltungsaufwand.There is performance overhead associated with creating the XML-formatted event data and sending the event notification.
Die SQL-Ablaufverfolgung kann beliebige Ablaufverfolgungs-Ereignisklassen überwachen.SQL Trace can monitor any trace event class. Ereignisbenachrichtigungen können Untergruppen von Ablaufverfolgungs-Ereignisklassen und außerdem alle DDL-Ereignisse (Data Definition Language) überwachen.Event notifications can monitor a subset of trace event classes and also all data definition language (DDL) events.
Sie können anpassen, welche Datenspalten in einem Ablaufverfolgungsereignis generiert werden sollen.You can customize which data columns to generate in a trace event. Das Schema der durch Ereignisbenachrichtigungen zurückgegebenen Ereignisdaten im XML-Format ist fest.The schema of the XML-formatted event data returned by event notifications is fixed.
Durch DDL generierte Ablaufverfolgungsereignisse werden unabhängig davon generiert, ob für die DDL-Anweisung ein Rollback durchgeführt wird.Trace events generated by DDL are always generated, regardless of whether the DDL statement is rolled back. Ereignisbenachrichtigungen werden nicht ausgelöst, wenn für das Ereignis in der zugehörigen DDL-Anweisung ein Rollback durchgeführt wird.Event notifications do not fire if the event in the corresponding DDL statement is rolled back.
Das Verwalten des Zwischenflusses der Daten der Ablaufverfolgungsereignisse beinhaltet das Auffüllen und Verwalten von Ablaufverfolgungsdateien oder -tabellen.Managing the intermediate flow of trace event data involves populating and managing trace files or trace tables. Die Zwischenverwaltung der Ereignisbenachrichtigungsdaten erfolgt automatisch über Service Broker-Warteschlangen.Intermediate management of event notification data is accomplished automatically through Service Broker queues.
Die Ablaufverfolgung muss bei jedem Neustart des Servers ebenfalls neu gestartet werden.Traces must be restarted every time the server restarts. Nach ihrer Registrierung sind Ereignisbenachrichtigungen serverzyklenübergreifend persistent und transaktiv.After being registered, event notifications persist across server cycles and are transacted.
Nach der Initiierung kann das Auslösen von Ablaufverfolgungen nicht mehr gesteuert werden.After being initiated, the firing of traces cannot be controlled. Beendigungszeiten und Filterzeiten können für das Angeben des Zeitpunkts ihrer Initiierung verwendet werden.Stop times and filter times can be used to specify when they initiate. Auf Ablaufverfolgungen wird durch Abrufen der entsprechenden Ablaufverfolgungsdatei zugegriffen.Traces are accessed by polling the corresponding trace file. Ereignisbenachrichtigungen können mithilfe der WAITFOR-Anweisung für die Warteschlange gesteuert werden, die die Nachricht empfängt, die von der Ereignisbenachrichtigung generiert wurde.Event notifications can be controlled by using the WAITFOR statement against the queue that receives the message generated by the event notification. Auf diese kann durch Abrufen der Warteschlange zugegriffen werden.They can be accessed by polling the queue.
ALTER TRACE ist die Mindestberechtigung, die zum Erstellen einer Ablaufverfolgung erforderlich ist.ALTER TRACE is the least permission that is required to create a trace. Außerdem ist die Berechtigung zum Erstellen einer Ablaufverfolgungsdatei auf dem entsprechenden Computer erforderlich.Permission is also required to create a trace file on the corresponding computer. Die Mindestberechtigung hängt vom Typ der erstellten Ereignisbenachrichtigung ab.Least permission depends on the type of event notification being created. Die RECEIVE-Berechtigung wird auch für die entsprechende Warteschlange benötigt.RECEIVE permission is also needed on the corresponding queue.
Ablaufverfolgungen können remote empfangen werden.Traces can be received remotely. Ereignisbenachrichtigungen können remote empfangen werden.Event notifications can be received remotely.
Ablaufverfolgungsereignisse werden mithilfe gespeicherter Systemprozeduren implementiert.Trace events are implemented by using system stored procedures. Ereignisbenachrichtigungen werden mithilfe einer Kombination aus Datenbank-EngineDatabase Engine - und Service BrokerService BrokerTransact-SQLTransact-SQL -Anweisungen implementiert.Event notifications are implemented by using a combination of Datenbank-EngineDatabase Engine and Service BrokerService BrokerTransact-SQLTransact-SQL statements.
Auf Ablaufverfolgungsdaten kann über Programmcode durch Abfragen der entsprechenden Ablaufverfolgungstabelle, durch Analysieren der Ablaufverfolgungsdatei oder mithilfe der TraceReader-Klasse von SMO ( SQL ServerSQL Server Management Objects) zugegriffen werden.Trace event data can be accessed programmatically by querying the corresponding trace table, parsing the trace file, or using the SQL ServerSQL Server Management Objects (SMO) TraceReader Class. Auf Ereignisdaten wird über Programmcode durch Ausgeben von XQuery für die als XML formatierten Ereignisdaten oder mithilfe der SMO-Ereignisklassen zugegriffen.Event data is accessed programmatically by issuing XQuery against the XML-formatted event data, or by using the SMO Event classes.

Tasks der EreignisbenachrichtigungEvent Notification Tasks

TaskTask ThemaTopic
Beschreibt, wie Ereignisbenachrichtigungen erstellt und implementiert werden.Describes how to create and implement event notifications. Implementieren von EreignisbenachrichtigungenImplement Event Notifications
Beschreibt, wie für Ereignisbenachrichtigungen, die Nachrichten an eine Service Broker-Instanz auf einem Remoteserver senden, die Dialogsicherheit von Service BrokerService Broker konfiguriert wird.Describes how to configure Service BrokerService Broker dialog security for event notifications that send messages to a service broker on a remote server. Konfigurieren der Dialogsicherheit für EreignisbenachrichtigungenConfigure Dialog Security for Event Notifications
Beschreibt, wie Informationen zu Ereignisbenachrichtigungen zurückgegeben werden.Describes how to return information about event notifications. Abrufen von Informationen zu EreignisbenachrichtigungenGet Information About Event Notifications

Weitere Informationen finden Sie unterSee Also

DDL-Trigger DDL Triggers
DML-Trigger DML Triggers
SQL-AblaufverfolgungSQL Trace