イベント通知を実装するには、まず、イベント通知を受信するターゲット サービスを作成してから、イベント通知を作成する必要があります。
重要
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 ステートメントを使用して削除されます。 イベント通知を変更するには、イベント通知を削除して再作成する必要があります。
次の例では、イベント通知 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> テキストの両方に対してイベント通知を作成しないようにするか、不要なイベント データをキャプチャしないようにロジックをアプリケーションに組み込むようにすることをお勧めします。
イベント通知を作成するには
イベント通知を削除するには