Grundlegendes zu Ereignisbenachrichtigungen

Ereignisbenachrichtigungen werden als Antwort auf eine Vielzahl von Transact-SQL-DDL-Anweisungen (Data Definition Language) und Ereignissen der SQL-Ablaufverfolgung ausgeführt, indem Informationen zu diesen Ereignissen an einen Service Broker-Dienst gesendet werden.

Ereignisbenachrichtigungen können für die folgenden Aufgaben verwendet werden:

  • Protokollieren und Prüfen von Änderungen oder Aktivitäten, die für die Datenbank auftreten.

  • Ausführen einer Aktion als Antwort auf ein Ereignis auf asynchrone statt auf synchrone Weise.

Ereignisbenachrichtigungen können eine Programmieralternative zu DDL-Triggern und der SQL-Ablaufverfolgung bieten.

Ereignisbenachrichtigungen werden asynchron außerhalb des Bereichs einer Transaktion ausgeführt. 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. Weitere Informationen finden Sie unter Grundlegendes zu Ereignisbenachrichtigungen im Vergleich zu Triggern.

Im Gegensatz zur SQL-Ablaufverfolgung kann mithilfe von Ereignisbenachrichtigungen eine Aktion innerhalb einer SQL Server-Instanz als Antwort auf ein Ereignis der SQL-Ablaufverfolgung ausgeführt werden. Weitere Informationen finden Sie unter Grundlegendes zu Ereignisbenachrichtigungen im Vergleich zur SQL-Ablaufverfolgung.

Wenn eine Ereignisbenachrichtigung erstellt wird, werden eine oder mehrere Service Broker-Konversationen zwischen einer Instanz von SQL Server und dem von Ihnen angegebenen Zieldienst geöffnet. Die Konversationen bleiben in der Regel geöffnet, so lange die Ereignisbenachrichtigung als Objekt für die Serverinstanz vorhanden ist. In einigen Fehlerfällen können die Konversationen geschlossen werden, bevor die Ereignisbenachrichtigung gelöscht wird. Diese Konversationen werden niemals für Ereignisbenachrichtigungen freigegeben. Jede Ereignisbenachrichtigung besitzt ihre eigenen, exklusiven Konversationen. 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.

Ereignisinformationen werden an den Service Broker als Variable des Typs xml übermittelt; diese Variable stellt Informationen zum Zeitpunkt des Auftretens eines Ereignisses, zum betroffenen Datenbankobjekt, der beteiligten Transact-SQL-Batchanweisung sowie weitere Informationen bereit. Weitere Informationen zum XML-Schema, das von Ereignisbenachrichtigungen erstellt wird, finden Sie unter EVENTDATA (Transact-SQL).

Ereignisdaten können von Anwendungen, die zusammen mit SQL Server ausgeführt werden, zum Nachverfolgen des Fortschritts sowie zum Treffen von Entscheidungen verwendet werden. Die folgende Ereignisbenachrichtigung sendet z. B. bei jeder Ausgabe einer ALTER TABLE-Anweisung in der AdventureWorks2008R2-Beispieldatenbank eine Benachrichtigung an einen bestimmten Dienst:

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

Ein Ereignisbenachrichtigungs-Beispielskript (EventNotificationSample.sql), das für die AdventureWorks2008R2-Beispieldatenbank ausgeführt werden kann, ist im Lieferumfang von Beispiele für SQL Server Database Engine enthalten.