適用対象:SQL Server
イベント通知を実装するには、最初にイベント通知を受け取る通知先サービスを作成してから、イベント通知を作成する必要があります。
重要
リモート サーバー上の Service Broker にメッセージを送信するイベント通知に対しては、Service Broker ダイアログ セキュリティを構成する必要があります。 ダイアログ セキュリティは完全なセキュリティ モデルに基づいて手動で構成する必要があります。
ターゲットサービスの作成
Service Broker には次のような、特定のメッセージ型とイベント通知用コントラクトがあるため、Service Broker によって開始されるサービスを作成する必要はありません。
https://schemas.microsoft.com/SQL/Notifications/PostEventNotification
イベント通知を受け取る対象サービスは、この既存のコントラクトに従う必要があります。
ターゲット サービスを作成するには:
メッセージを受信するキューを作成します。
注
キューでは、
http://schemas.microsoft.com/SQL/Notifications/QueryNotificationで定義されているメッセージ型が受信されます。このキューにイベント通知コントラクトを参照するサービスを作成します。
サービスにルートを作成し、そのサービスに対するメッセージを Service Broker から送信する宛先のアドレスを定義します。 イベント通知の送信先が同じデータベース内のサービスの場合は、
ADDRESS = 'LOCAL'を指定します。注
Service Broker のルーティングにより、通知メッセージを受け取るサービスが決定されます。 イベント通知の通知先がリモート サーバーのサービスの場合、ソース サーバーとターゲット サーバーの両方でルートを定義し、双方向の通信を確立する必要があります。
次に、キューを作成し、そのキューにサービスを作成し、そのサービスのルートを作成して、イベント通知コントラクトからのメッセージを処理する例を示します。
CREATE QUEUE NotifyQueue ;
GO
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue
(
[http://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イベントと、< ステートメントの>schema_elementCREATE SCHEMA定義を個別のイベントとして認識します。 たとえば、CREATE_SCHEMA イベントと CREATE_TABLE イベントの両方でイベント通知が作成され、次のバッチを実行します。
CREATE SCHEMA s
CREATE TABLE t1 (col1 int)
この場合、イベント通知は、CREATE_SCHEMA イベントが発生したときと、CREATE_TABLE イベントが発生したときに 2 回発生します。 CREATE_SCHEMA イベントと、対応する<定義の>schema_elementCREATE SCHEMA テキストの両方に対してイベント通知を作成しないようにするか、不要なイベント データをキャプチャしないようにロジックをアプリケーションに組み込むようにすることをお勧めします。
イベント通知を作成するには
イベント通知を削除するには