次の方法で共有


サーバーイベントのWMIプロバイダーを理解する

WMI Provider for Server Events を使用すると、Windows Management Instrumentation (WMI) を使用して SQL Server のイベントを監視できます。 プロバイダーは、SQL Server をマネージド WMI オブジェクトに変換することによって機能します。 SQL Server でイベント通知を生成できるイベントは、このプロバイダーを使用して WMI によって利用できます。 さらに、WMI と対話する管理アプリケーションとして、SQL Server エージェントはこれらのイベントに応答できるため、以前のリリースよりも SQL Server エージェントの対象となるイベントの範囲が広がります。

SQL Server エージェントなどの管理アプリケーションは、WMI クエリ言語 (WQL) ステートメントを発行することで、WMI Provider for Server イベントを使用して SQL Server イベントにアクセスできます。 WQL は、WMI 固有の拡張機能を備えた構造化クエリ言語 (SQL) の簡略化されたサブセットです。 WQL を使用する場合、アプリケーションは特定のデータベースまたはデータベース オブジェクトに対してイベントの種類を取得します。 WMI Provider for Server Events は、クエリをイベント通知に変換し、ターゲット データベースにイベント通知を効果的に作成します。 SQL Server でのイベント通知の動作の詳細については、「 WMI Provider for Server Events Concepts」を参照してください。 クエリを実行できるイベントは、 サーバー イベント クラスとプロパティの WMI プロバイダーに一覧表示されます。

イベント通知をトリガーしてメッセージを送信するイベントが発生すると、メッセージは、SQL/Notifications/ProcessWMIEventProviderNotification/v1.0 という名前の msdb の定義済みのターゲット サービスに送信されます。 このサービスは、WMIEventProviderNotificationQueue という名前の msdb 内の定義済みキューにイベントを配置します。 (サービスとキューの両方が、最初に SQL Server に接続するときにプロバイダーによって動的に作成されます)。その後、プロバイダーはこのキューからイベント データを読み取り、アプリケーションに返す前にマネージド オブジェクト形式 (MOF) に変換します。 次に、このプロセスの図を示します。

WMI Provider for Server Events の WMI Provider for Server Events

たとえば、次の WQL クエリを考えてみましょう。

SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks'

このクエリに応答して、WMI Provider for Server Events は、ターゲット データベースに同等のイベント通知を作成します。

USE AdventureWorks ;
GO
CREATE EVENT NOTIFICATION SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9
    ON DATABASE
    WITH FAN_IN
    FOR DDL_DATABASE_LEVEL_EVENTS
    TO SERVICE
        'SQL/Notifications/ProcessWMIEventProviderNotification/v1.0', 
        'A7E5521A-1CA6-4741-865D-826F804E5135';
GO

この例では、 SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9 はプレフィックス SQLWEP_ と GUID で構成される Transact-SQL 識別子です。 SQLWEP では、識別子ごとに新しい GUID が作成されます。 TO SERVICEA7E5521A-1CA6-4741-865D-826F804E5135値は、msdb データベース内のブローカー インスタンスを識別する GUID です。

WQL の使用方法の詳細については、「 サーバー イベント用 WMI プロバイダーでの WQL の使用」を参照してください。

管理アプリケーションは、プロバイダーによって定義されている WMI 名前空間に接続することで、WMI Provider for Server イベントを SQL Server のインスタンスに転送します。 Windows WMI サービスは、この名前空間をプロバイダー DLL にマップし、Sqlwep.dllしてメモリに読み込みます。 プロバイダーは、SQL Server の各インスタンスのサーバー イベントの WMI 名前空間を管理します。形式は \\.\root\Microsoft\SqlServer\ServerEvents\instance_name で、 既定instance_name MSSQLSERVER です。 SQL Server のインスタンスの WMI 名前空間に接続する方法の詳細については、「WMI Provider for Server Events での WQL の使用」を参照してください。

プロバイダー DLL Sqlwep.dllは、サーバー上の SQL Server インスタンスの数に関係なく、サーバーのオペレーティング システムの WMI ホスト サービスに 1 回だけ読み込まれます。

WMI Provider for Server イベントを使用する SQL Server エージェント管理アプリケーションの例については、「 サンプル: WMI Provider for Server イベントを使用した SQL Server エージェント アラートの作成」を参照してください。 マネージド コードで WMI Provider for Server イベントを使用する管理アプリケーションの例については、「 サンプル: マネージド コードでの WMI イベント プロバイダーの使用」を参照してください。 詳細については、Microsoft .NET Framework SDK の WMI に関する情報も参照してください。

こちらもご覧ください

サーバー イベントの WMI プロバイダーの概念