次の方法で共有


イベント通知を実装する

イベント通知を実装するには、まず、イベント通知を受信するターゲット サービスを作成してから、イベント通知を作成する必要があります。

重要

Service Broker ダイアログ セキュリティは、リモート サーバー上のサービス ブローカーにメッセージを送信するイベント通知用に構成する必要があります。 ダイアログ セキュリティは、完全なセキュリティ モデルに従って手動で構成する必要があります。

ターゲット サービスの作成

Service Broker にはイベント通知用の次の特定のメッセージの種類とコントラクトが含まれているため、Service Broker 開始サービスを作成する必要はありません。

https://schemas.microsoft.com/SQL/Notifications/PostEventNotification  

イベント通知を受信するターゲット サービスは、この既存のコントラクトを尊重する必要があります。

ターゲット サービスを作成するには:

  1. メッセージを受信するキューを作成します。

    キューは、次のメッセージの種類を受け取ります: https://schemas.microsoft.com/SQL/Notifications/QueryNotification

  2. イベント通知コントラクトを参照するサービスをキューに作成します。

  3. 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 ステートメントを使用して削除されます。 イベント通知を変更するには、イベント通知を削除して再作成する必要があります。

次の例では、イベント通知 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 イベントが発生したときの計2回発生します。 CREATE_SCHEMA イベントと、対応する CREATE SCHEMA 定義の <schema_element> テキストの両方に対してイベント通知を作成しないようにするか、不要なイベント データをキャプチャしないようにロジックをアプリケーションに組み込むようにすることをお勧めします。

イベント通知を作成するには

イベント通知を削除するには

こちらもご覧ください

イベント通知に関する情報を取得する
EVENTDATA (Transact-SQL)