イベント通知の実装

更新 : 2005 年 12 月 5 日

イベント通知を実装するには、最初にイベント通知を受け取る通知先サービスを作成してから、イベント通知を作成する必要があります。

ms178080.note(ja-jp,SQL.90).gif重要 :
Service Broker のダイアログ セキュリティを、イベント通知によってリモート サーバーの Service Broker にメッセージを送信するように構成する必要があります。ダイアログ セキュリティは、完全なセキュリティ モデルに基づいて手動で構成する必要があります。詳細については、「イベント通知のダイアログ セキュリティ」を参照してください。

通知先サービスの作成

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

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

イベント通知を受け取る対象サービスは、この既存のコントラクトに従う必要があります。

通知先サービスを作成するには:

  1. メッセージを受信するキューを作成します。
    ms178080.note(ja-jp,SQL.90).gifメモ :
    キューでは、https://schemas.microsoft.com/SQL/Notifications/QueryNotification で定義されているメッセージ型が受信されます。
  2. このキューにイベント通知コントラクトを参照するサービスを作成します。
  3. サービスにルートを作成し、そのサービスに対するメッセージを Service Broker から送信する送信先のアドレスを定義します。イベント通知の送信先が同じデータベース内のサービスの場合は、ADDRESS = 'LOCAL' を指定します。
    ms178080.note(ja-jp,SQL.90).gifメモ :
    Service Broker のルーティングにより、通知メッセージを受け取るサービスが特定されます。イベント通知の通知先がリモート サーバーのサービスの場合、通知側と通知先の両方のサーバーでルートを定義し、双方向の通信を確立する必要があります。詳細については、「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

Service Broker の通知先サービスの作成方法の詳細については、「Service Broker のプログラミングの概要」を参照してください。

イベント通知の作成

イベント通知の作成には 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' ;
ms178080.Caution(ja-jp,SQL.90).gif注意 :
イベント通知では、CREATE_SCHEMA イベントと、CREATE SCHEMA ステートメントの <schema_element> 定義を別々のイベントとして認識します。たとえば、CREATE_SCHEMA イベントと CREATE_TABLE イベントの両方でイベント通知が作成され、次のバッチを実行します。 CREATE SCHEMA s CREATE TABLE t1 (col1 int) この場合イベント通知は、CREATE_SCHEMA イベントの発生時に 1 回、CREATE_TABLE イベントの発生時にもう 1 回、合計 2 回発生します。CREATE_SCHEMA イベントと、対応するすべての CREATE SCHEMA 定義の <schema_element> テキストの両方でイベント通知が作成されないようにするか、または不要なイベント データのキャプチャを防止するためのロジックをアプリケーションに組み込むことをお勧めします。

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

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

参照

概念

イベント通知について
イベント通知のデザイン
イベント通知に関する情報の取得

その他の技術情報

EVENTDATA (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2005 年 12 月 5 日

新しい内容 :
  • CREATE_SCHEMA イベントと CREATE SCHEMA ステートメントの <schema_element> 定義で作成されるイベント通知が意図せずに 2 回発生する可能性があるという注の記述を追加しました。
変更内容 :
  • イベント通知のダイアログ セキュリティに関するセクションを、別のトピックへのリンクを含む重要の記述に変更しました。