次の方法で共有


WMI Provider for Server Events について

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 Events を使用して SQL Server イベントにアクセスできます。 WQL は、WMI 特有の拡張機能を複数持つ、構造化照会言語 (SQL) の単純化されたサブセットです。 WQL を使用した場合、アプリケーションは特定のデータベースまたはデータベース オブジェクトに対してイベントの種類を取得します。 WMI Provider for Server Events は、クエリをイベント通知に変換し、対象データベース内のイベント通知を効率的に作成します。 SQL Serverでのイベント通知のしくみの詳細については、「WMI Provider for Server Events Concepts」を参照してください。 クエリを実行できるイベントは、「 WMI Provider for Server Events Classes and Properties」に一覧表示されます。

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

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

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

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

参照

WMI Provider for Server Events の概念