Entwerfen von Ereignisbenachrichtigungen
Aktualisiert: 14. April 2006
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.
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';
Verknüpfungen mit Transact-SQL-Anweisungen und Bereiche, die für diese angegeben werden können, werden im Abschnitt zum Auswählen einer bestimmten DDL-Anweisung für das Auslösen einer Ereignisbenachrichtigung behandelt.
Ereignisbenachrichtigungen werden nicht als Antwort auf Ereignisse ausgegeben, die lokale oder globale temporäre Tabellen und gespeicherte Prozeduren betreffen.
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, ist im Thema DDL-Anweisungen für die Verwendung mit Ereignisbenachrichtigungen enthalten. Diese Ereignisse können auch durch Abfragen der sys.extended_properties-Katalogsicht abgerufen werden.
Hinweis: |
---|
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. Die gespeicherte Prozedur sp_rename löst jedoch keine Ereignisbenachrichtigung aus. |
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 Event-Based Activation. Das BROKER_QUEUE_DISABLED-Ereignis tritt auf, wenn der Status einer Warteschlange auf OFF festgelegt wird. Weitere Informationen finden Sie unter Handling Poison Messages.
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, werden die von einer Ereignisgruppe abgedeckten Ereignisse der sys.events-Katalogsicht hinzugefügt.
Das Thema DDL-Ereignisgruppen zum Verwenden mit Ereignisbenachrichtigungen 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.
Siehe auch
Konzepte
Grundlegendes zu Ereignisbenachrichtigungen
Implementieren von Ereignisbenachrichtigungen
Andere Ressourcen
Hilfe und Informationen
Informationsquellen für SQL Server 2005
Änderungsverlauf
Version | Verlauf |
---|---|
14. April 2006 |
|
05. Dezember 2005 |
|