イベント通知について
イベント通知は、さまざまな Transact-SQL データ定義言語 (DDL) ステートメントおよび SQL トレースのイベントに応答して実行されます。イベント通知は、これらのイベントに関する情報を Service Broker サービスに送信することで実行されます。
イベント通知を使用できるのは、次のような作業を行う場合です。
データベース上で発生した変更または操作をログに記録して確認する。
イベントに応答した操作を、同期的にではなく、非同期に実行する。
イベント通知により、DDL トリガおよび SQL トレースに代わるプログラミングを提供できます。
イベント通知は、トランザクションのスコープの外部で非同期に実行されます。そのため、DDL トリガとは異なり、イベント通知をデータベース アプリケーション内部で使用して、即時トランザクションで定義されるリソースを使用しないでイベントに応答することができます。詳細については、「イベント通知とトリガについて」を参照してください。
SQL トレースとは異なり、イベント通知は、SQL トレース イベントに応答して、SQL Server のインスタンス内で操作を実行するために使用できます。詳細については、「イベント通知と SQL トレースについて」を参照してください。
イベント通知が作成されると、SQL Server のインスタンスと指定した対象サービスの間で、1 つ以上の Service Broker メッセージ交換が開かれます。メッセージ交換は通常、イベント通知がサーバー インスタンス上のオブジェクトとして存在する限り、開いたままになります。一部のエラーでは、イベント通知が削除される前にメッセージ交換が終了する場合があります。このようなメッセージ交換がイベント通知間で共有されることはありません。イベント通知ごとに、独自の排他的なメッセージ交換が確立されます。メッセージ交換を明示的に終了すると、対象のサービスがこれ以上メッセージを受信しなくなります。また、次回イベント通知が起動されてもメッセージ交換は再度開かれません。
イベント発生時の情報、影響を受けるデータベース オブジェクトの情報、関係する Transact-SQL バッチ ステートメント、およびその他の情報を提供するイベント情報が、xml 型の変数として Service Broker に配信されます。イベント通知によって生成された XML スキーマの詳細については、「EVENTDATA (Transact-SQL)」を参照してください。
イベント データは、SQL Server と共に実行されているアプリケーションで使用して、進行状況を追跡したり判断を下したりすることができます。たとえば、AdventureWorks サンプル データベースで ALTER TABLE ステートメントが実行されるたびに、次のイベント通知により、特定のサービスに情報が送信されます。
USE AdventureWorks
GO
CREATE EVENT NOTIFICATION NotifyALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE '//Adventure-Works.com/ArchiveService' ,
'8140a771-3c4b-4479-8ac0-81008ab17984';
AdventureWorks サンプル データベースに対して実行できるイベント通知のサンプル スクリプト EventNotificationSample.sql は、「SQL Server データベース エンジン サンプル」に用意されています。詳細については、「Event Notifications Sample」を参照してください。