實作事件通知
若要實作事件通知,您必須先建立目標服務來接收事件通知,然後建立事件通知。
重要
您應該針對向遠端伺服器上的服務訊息代理程式傳送訊息的事件通知,設定 Service Broker 的對話安全性。 對話安全性必須根據完整安全性模型,以手動方式加以設定。
建立目標服務
您不必建立 Service Broker 起始服務,因為 Service Broker 包括下列特定訊息類型和事件通知的合約:
https://schemas.microsoft.com/SQL/Notifications/PostEventNotification
接收事件通知的目標服務必須遵照這項預先存在的合約。
若要建立目標服務:
建立要接收訊息的佇列。
注意
佇列會接收下列訊息類型:
https://schemas.microsoft.com/SQL/Notifications/QueryNotification
。在參考事件通知合約的佇列上建立服務。
在服務上建立路由,以定義 Service Broker 要將該服務的訊息傳送到哪一個位址。 如果事件通知是以相同資料庫中的服務為目標,請指定
ADDRESS = 'LOCAL'
。注意
Service Broker 路由會判斷要接收通知訊息的服務。 如果事件通知是以遠端伺服器的服務為目標,則來源伺服器和目標伺服器上都必須要定義路由,以確保可以進行雙向通訊。
下列範例會建立佇列、佇列上的服務及服務上的路由,以處理來自事件通知合約的訊息:
CREATE QUEUE NotifyQueue ;
GO
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue
(
[https://schemas.microsoft.com/SQL/Notifications/PostEventNotification]
);
GO
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = 'NotifyService',
ADDRESS = 'LOCAL';
GO
建立事件通知
事件通知使用 Transact-SQL CREATE EVENT NOTIFICATION 陳述式建立,並使用 DROP EVENT NOTIFICATION STATEMENT 卸除。 若要修改事件通知,您必須先卸除再重新建立事件通知。
下列範例會建立事件通知 CreateDatabaseNotification
。 當伺服器上發生任何 CREATE_DATABASE
事件時,這個通知會傳送此訊息給先前建立的 NotifyService
服務。
CREATE EVENT NOTIFICATION CreateDatabaseNotification
ON SERVER
FOR CREATE_DATABASE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984' ;
警告
事件通知將 CREATE_SCHEMA 事件與 CREATE SCHEMA 陳述式的 <schema_element> 定義視為各自獨立的事件。 例如,對 CREATE_SCHEMA 和 CREATE_TABLE 事件建立事件通知,且您執行下列批次。
CREATE SCHEMA s
CREATE TABLE t1 (col1 int)
在此案例中,事件通知引發了兩次:一次是在 CREATE_SCHEMA 事件發生時,一次只在 CREATE_TABLE 事件發生時。 我們建議您避免在 CREATE_SCHEMA 事件和任何對應 CREATE SCHEMA 定義的 <schema_element> 文字上同時建立事件通知,或在應用程式中建立邏輯,以避免擷取到不必要的事件資料。
若要建立事件通知
若要卸除事件通知