Entwerfen von Ereignisbenachrichtigungen

Zum Entwerfen von Ereignisbenachrichtigungen müssen Sie Folgendes bestimmen:

  • Den Gültigkeitsbereich der Benachrichtigung.

  • Die Transact-SQL-Anweisung bzw. Gruppe von Anweisungen, die die Ereignisbenachrichtigung auslöst.

HinweisHinweis

Ereignisbenachrichtigungen werden nicht als Antwort auf Ereignisse ausgegeben, die lokale oder globale temporäre Tabellen und gespeicherte Prozeduren betreffen.

Definieren des Gültigkeitsbereichs der Benachrichtigung

Sie können angeben, dass eine Ereignisbenachrichtigung als Antwort auf eine Anweisung erfolgen soll, die alle Objekte der aktuellen Datenbank oder alle Objekte einer Instanz von SQL Server betrifft. Ereignisbenachrichtigungen, die für die Ereignisse QUEUE_ACTIVATION und BROKER_QUEUE_DISABLED festgelegt werden, besitzen als Gültigkeitsbereich eine bestimmte Warteschlange. Gültigkeitsbereiche sind vom Typ des Ereignisses abhängig. So können beispielsweise CREATE_DATABASE-Ereignisse nur auf der Ebene der Serverinstanz stattfinden. Andererseits kann eine für ein ALTER_TABLE-Ereignis erstellte Ereignisbenachrichtigung so programmiert werden, dass sie für alle Tabellen der Datenbank oder alle Tabellen der Serverinstanz ausgegeben wird.

Im folgenden Beispiel wird bei jeder ALTER TABLE-Anweisung, die auf der Serverinstanz ausgeführt werden, eine Benachrichtigung an die Service Broker-Instanz der aktuellen Datenbank gesendet.

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR ALTER_TABLE 
   TO SERVICE '//Adventure-Works.com/ArchiveService' , 'current database';

Links mit Transact-SQL-Anweisungen und Bereiche, die für diese angegeben werden können, werden im nachfolgenden Abschnitt zum Auswählen einer bestimmten DDL-Anweisung für das Auslösen einer Ereignisbenachrichtigung behandelt.

Angeben einer Transact-SQL-Anweisung oder Gruppe von Anweisungen

Sie können Ereignisbenachrichtigungen erstellen, die als Antwort auf Folgendes ausgeführt werden:

  • Eine bestimmte DDL-Anweisung, ein SQL-Ablaufverfolgungsereignis oder ein Service Broker-Ereignis

  • Eine vordefinierte Gruppe von DDL-Anweisungen oder SQL-Ablaufverfolgungsereignissen

Auswählen einer bestimmten DDL-Anweisung für das Auslösen einer Ereignisbenachrichtigung

Ereignisbenachrichtigungen können so entworfen werden, dass sie nach dem Ausführen einer bestimmten Transact-SQL-Anweisung oder gespeicherten Prozedur ausgelöst werden. Im vorherigen Beispiel findet die Ereignisbenachrichtigung nach einem ALTER_TABLE-Ereignis statt.

Eine Liste der einzelnen Transact-SQL-Anweisungen, die zum Auslösen einer Ereignisbenachrichtigung angegeben werden können, und des Bereichs, in dem die Benachrichtigungen ausgeführt werden können, finden Sie unter DDL-Ereignisse. Diese Ereignisse können auch durch Abfragen der sys.extended_properties-Katalogsicht abgerufen werden.

HinweisHinweis

Bestimmte gespeicherte Systemprozeduren, die DDL-ähnliche Vorgänge ausführen, können ebenfalls Ereignisbenachrichtigungen auslösen. Testen Sie Ihre Ereignisbenachrichtigungen, um ihre Reaktion auf die Ausführung von gespeicherten Systemprozeduren zu bestimmen. Die CREATE TYPE-Anweisung und die gespeicherte Prozedur sp_addtype lösen z. B. beide eine Ereignisbenachrichtigung aus, die für ein CREATE_TYPE-Ereignis erstellt wird.

Auswählen eines bestimmten SQL-Ablaufverfolgungsereignisses zum Auslösen einer Ereignisbenachrichtigung

Ereignisbenachrichtigungen können so entworfen werden, dass sie ausgelöst werden, nachdem ein bestimmtes SQL-Ablaufverfolgungsereignis auftritt. Die folgende Ereignisbenachrichtigung wird beispielsweise nach einem Object_Created-Ereignis auf dem Server ausgelöst.

CREATE EVENT NOTIFICATION log_ddl1 
   ON SERVER 
   FOR Object_Created 
   TO SERVICE '//Adventure-Works.com/ArchiveService', 'current database' ;

Eine Liste der SQL-Ablaufverfolgungsereignisse, die eine Ereignisbenachrichtigung auslösen können, finden Sie unter Ablaufverfolgungsereignisse für die Verwendung mit Ereignisbenachrichtigungen. Eine Liste dieser Ereignisse kann auch durch Abfragen der sys.extended_properties-Katalogsicht abgerufen werden. SQL-Ablaufverfolgungsereignisse können nur im Serverinstanzbereich ausgeführt werden. Weitere Informationen zu SQL-Ablaufverfolgungsereignissen finden Sie unter SQL Server Profiler (Referenz).

Auswählen eines Service Broker-Ereignisses für das Auslösen einer Ereignisbenachrichtigung

Ereignisbenachrichtigungen können so entworfen werden, dass sie nach einem QUEUE_ACTIVATION- oder BROKER_QUEUE_DISABLED-Service Broker-Ereignis ausgelöst werden. Das QUEUE_ACTIVATION-Ereignis tritt auf, wenn eine Warteschlange Nachrichten verarbeiten muss. Weitere Informationen finden Sie unter Ereignisbasierte Aktivierung. Das BROKER_QUEUE_DISABLED-Ereignis tritt auf, wenn der Status einer Warteschlange auf OFF festgelegt wird. Weitere Informationen finden Sie unter Behandeln von nicht verarbeitbaren Nachrichten.

Auswählen einer vordefinierten Gruppe von DDL-Anweisungen für das Auslösen einer Ereignisbenachrichtigung

Eine Ereignisbenachrichtigung kann nach dem Ausführen eines beliebigen Transact-SQL-Ereignisses stattfinden, das zu einer vordefinierten Gruppe ähnlicher Ereignisse gehört. Wenn z. B. nach jedem Ausführen einer CREATE TABLE-, ALTER TABLE- oder DROP TABLE-Anweisung eine Ereignisbenachrichtigung stattfinden soll, können Sie FOR DDL_TABLE_EVENTS in der CREATE EVENT NOTIFICATION-Anweisung angeben. Nachdem CREATE EVENT NOTIFICATION ausgeführt wurde, wird die Ereignisgruppe zur sys.events-Katalogsicht hinzugefügt.

HinweisHinweis

In SQL Server 2005 erweitert sys.events Ereignisgruppen, indem nur die einzelnen Ereignisse aufgeführt werden, die von einer Gruppe abgedeckt werden. Daher gelten Änderungen der von diesen Ereignisgruppen in SQL Server 2008 abgedeckten Ereignisse nicht für Ereignisbenachrichtigungen, die für diese Ereignisgruppen in SQL Server 2005 erstellt werden.

Das Thema DDL-Ereignisgruppen enthält eine Liste der vordefinierten Gruppen von DDL- und DML-Anweisungen, die für Ereignisbenachrichtigungen verfügbar sind, die entsprechenden Anweisungen sowie die Gültigkeitsbereiche, für die diese Ereignisgruppen ausgeführt werden können.

Auswählen einer vordefinierten Gruppe von SQL-Ablaufverfolgungsereignissen für das Auslösen einer Ereignisbenachrichtigung

Eine Ereignisbenachrichtigung kann nach dem Ausführen eines beliebigen SQL-Ablaufverfolgungsereignisses stattfinden, das zu einer vordefinierten Gruppe ähnlicher Ereignisse gehört. Wenn z. B. nach jedem Sperrereignis, d. h. LOCK_DEADLOCK, LOCK_DEADLOCK_CHAIN, LOCK_ESCALATION und DEADLOCK_GRAPH eine Ereignisbenachrichtigung stattfinden soll, können Sie FOR TRC_LOCKS in der CREATE EVENT NOTIFICATION-Anweisung angeben.

Eine Liste der für Ereignisbenachrichtigungen verfügbaren vordefinierten Gruppen von SQL-Ablaufverfolgungsereignissen finden Sie unter Ablaufverfolgungsereignisgruppen zum Verwenden mit Ereignisbenachrichtigungen. Diese Gruppen können nur auf der Ebene der Serverinstanz ausgeführt werden.