Share via


設計事件通知

若要設計事件通知,您必須決定下列項目:

  • 通知的範圍。

  • 引發事件通知的 Transact-SQL 陳述式或陳述式群組。

[!附註]

對影響本機或全域暫存資料表和預存程序的事件,不會發生事件通知作為回應。

定義通知範圍

您可以指定要發生的事件通知,以回應目前資料庫中所有物件或 SQL Server 執行個體上所有物件執行的陳述式。QUEUE_ACTIVATION 和 BROKER_QUEUE_DISABLED 事件上指定的事件通知範圍為個別佇列。並非所有事件都可以在任意範圍發生。例如,CREATE_DATABASE 事件只發生在伺服器執行個體層級。相反地,對 ALTER_TABLE 事件建立的事件通知,可以程式化為發生在資料庫中的所有資料表或伺服器執行個體上的所有資料表。

下列範例會將伺服器執行個體上執行之任何 ALTER TABLE 陳述式的通知,傳送到目前資料庫中的 Service Broker 執行個體。

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

接下來的「選取特定 DDL 陳述式以引發事件通知」這一節,提供了 Transact-SQL 陳述式的連結以及可針對這些陳述式指定的範圍。

指定 Transact-SQL 陳述式或陳述式群組

您可以建立為了回應下列各項而發生的事件通知:

  • 特定 DDL 陳述式、SQL 追蹤事件或 Service Broker 事件

  • 預先定義的 DDL 陳述式 (或 SQL 追蹤事件) 群組

選取特定 DDL 陳述式以引發事件通知

您可以將事件通知設計在特定 Transact-SQL 陳述式或預存程序執行之後發生。如上例所示,該事件通知是發生在 ALTER_TABLE 事件之後。

如需可指定來引發事件通知的個別 Transact-SQL 陳述式清單,以及可執行通知的範圍,請參閱<DDL 事件>。您也可以透過查詢 sys.event_notification_event_types 目錄檢視,取得這些事件。

[!附註]

執行類似 DDL 作業的系統預存程序也可以引發事件通知。請測試事件通知以判斷它們對執行之系統預存程序的回應。例如,CREATE TYPE 陳述式與 sp_addtype 預存程序都會引發在 CREATE_TYPE 事件上建立的事件通知。

選取特定 SQL 追蹤事件以引發事件通知

您可以設計在 SQL 追蹤事件發生之後引發的事件通知。例如,下列事件通知會在伺服器的 Object_Created 事件之後引發。

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

如需可引發事件通知的 SQL 追蹤事件清單,請參閱<與事件通知搭配使用的追蹤事件>。您也可以透過查詢 sys.event_notification_event_types 目錄檢視,取得這些事件的清單。SQL 追蹤事件只能在伺服器執行個體範圍執行。如需 SQL 追蹤事件類別的詳細資訊,請參閱<SQL Server Profiler 參考>。

選取 Service Broker 事件以引發事件通知

事件通知可以設計成在 QUEUE_ACTIVATION 或 BROKER_QUEUE_DISABLED Service Broker 事件之後引發。當佇列有需要處理的訊息時,會發生 QUEUE_ACTIVATION 事件。如需詳細資訊,請參閱<事件架構的啟動>。當佇列的狀態設為 OFF 時,會發生 BROKER_QUEUE_DISABLED 事件。如需詳細資訊,請參閱<處理有害訊息>。

選取預先定義的 DDL 陳述式群組以引發事件通知

事件通知可以在預先定義之類似事件群組所屬的任何 Transact-SQL 事件執行之後發生。例如,如果您要在 CREATE TABLE、ALTER TABLE 或 DROP TABLE 陳述式執行之後發生事件通知,則可以在 陳述式中指定 FOR DDL_TABLE_EVENTS。在執行 CREATE EVENT NOTIFICATION 之後,會將此事件群組加入至 sys.events 目錄檢視中。

[!附註]

在 SQL Server 2005 中,sys.events 會藉由只列出群組所涵蓋的個別事件來展開事件群組。因此,對 SQL Server 2008 中事件群組所涵蓋之事件的變更不會套用到 SQL Server 2005 中的這些事件群組上所建立的事件通知。

如需可用於事件通知的預先定義 DDL 和 DML 陳述式群組清單、其所涵蓋的特定陳述式,以及這些事件群組可執行的範圍,請參閱<DDL 事件群組>。

選取預先定義的 SQL 追蹤事件群組以引發事件通知

事件通知可以在預先定義之類似追蹤事件群組所屬的任何 SQL 追蹤事件執行之後發生。例如,如果您要事件通知在任何鎖定相關的追蹤事件 (包括 LOCK_DEADLOCK、LOCK_DEADLOCK_CHAIN、LOCK_ESCALATION 和 DEADLOCK_GRAPH 事件) 之後發生,則可以在 CREATE EVENT NOTIFICATION 陳述式中指定 FOR TRC_LOCKS。

如需可用於事件通知之預先定義 SQL 追蹤事件群組的清單,請參閱<與事件通知一起使用的追蹤事件群組>。這些群組只能在伺服器執行個體層級執行。