瞭解事件通知
事件通知會將這些事件的資訊傳送給 Service Broker 服務,以回應各種 Transact-SQL 資料定義語言 (DDL) 陳述式和 SQL 追蹤事件。
事件通知可用來執行下列工作:
- 記錄和檢閱發生在資料庫的變更或活動。
- 執行動作以非同步而不是同步的方式來回應事件。
事件通知可提供程式設計替代方案給 DDL 觸發程序和 SQL 追蹤。
事件通知會以非同步方式在交易範圍以外執行。因此,與 DDL 觸發程序不同的是,事件通知可在資料庫應用程式中使用,以便回應未使用立即交易所定義之資源的事件。如需詳細資訊,請參閱<瞭解事件通知與觸發程序>。
與 SQL 追蹤不同的是,事件通知可用來在 SQL Server 執行個體內執行動作,以回應 SQL 追蹤事件。如需詳細資訊,請參閱<瞭解事件通知與 SQL 追蹤>。
建立事件通知時,會在 SQL Server 執行個體與您所指定的目標服務之間開啟一或多個 Service Broker 交談。交談通常會維持開啟狀態,只要事件通知是以伺服器執行個體上的物件存在即可。在某些錯誤的例子中,可以在卸除事件通知之間先關閉交談。這些交談永遠不會在事件通知之間共用。每個事件通知都有自己獨佔的交談。明確地結束交談可防止目標服務再收到訊息,而且在下次事件通知引發之前都不會再重新開啟交談。
事件資訊是以 xml 類型的變數傳遞至 Service Broker,它提供事件發生時的資訊、受影響之資料庫物件的資訊、相關的 Transact-SQL 批次陳述式以及其他資訊。如需事件通知所產生之 XML 結構描述的詳細資訊,請參閱<EVENTDATA (Transact-SQL)>。
與 SQL Server 一起執行的應用程式可使用事件資料來追蹤進度和下決定。例如,下列事件通知會在每次於 AdventureWorks 範例資料庫中發出 ALTER TABLE
陳述式時,將通知傳送給特定服務。
USE AdventureWorks
GO
CREATE EVENT NOTIFICATION NotifyALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE '//Adventure-Works.com/ArchiveService' ,
'8140a771-3c4b-4479-8ac0-81008ab17984';
在 SQL Server Database Engine 範例中提供可針對 AdventureWorks 範例資料庫執行的事件通知範例指令碼 (EventNotificationSample.sql)。如需詳細資訊,請參閱<事件通知範例>。