Compreendendo o Provedor WMI para eventos do servidor

O Provedor WMI para Eventos de Servidor permite usar o WMI para monitorar eventos no SQL Server. O provedor funciona transformando o SQL Server em um objeto WMI gerenciado. Qualquer evento que possa gerar uma notificação de eventos no SQL Server pode ser aproveitado pelo WMI usando esse provedor. Além disso, como um aplicativo de gerenciamento que interage com o WMI, o SQL Server Agent pode responder a esses eventos, aumentando o escopo de eventos abordados pelo SQL Server Agent em versões anteriores.

Aplicativos de gerenciamento, como o SQL Server Agent, podem acessar eventos do SQL Server que usem o Provedor WMI para Eventos de Servidor emitindo instruções de linguagem WQL. O WQL é um subconjunto simplificado da linguagem SQL, com algumas extensões específicas do WMI. Usando o WQL, um aplicativo recupera um tipo de evento em relação a um banco de dados específico ou objeto de banco de dados. O Provedor WMI para Eventos de Servidor converte a consulta em uma notificação de eventos, criando efetivamente uma notificação de eventos no banco de dados de destino. Para obter mais informações sobre como as notificações de evento agem no SQL Server, consulte Notificações de eventos (Mecanismo de Banco de Dados). Os eventos que podem ser consultados são listados em Classes e propriedades do Provedor WMI para Eventos de Servidor.

Quando ocorre um evento que aciona a notificação de evento para enviar uma mensagem, a mensagem é enviada para um serviço de destino predefinido em msdb que é chamado de SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. O serviço coloca o evento em uma fila predefinida em msdb que é chamada de WMIEventProviderNotificationQueue. (O serviço e a fila são criados dinamicamente pelo provedor quando ele se conecta pela primeira vez ao SQL Server.) O provedor lê os dados de evento dessa fila e os transforma em formato MOF (Managed Object Format) antes de devolvê-los ao aplicativo. A ilustração a seguir mostra este processo.

Diagrama de fluxo do Provedor WMI para Eventos de Servidor

Por exemplo, considere a seguinte Consulta WQL:

SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks'

Em resposta a essa consulta, o Provedor WMI para Eventos de Servidor cria a notificação de eventos equivalente no banco de dados de destino:

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

Neste exemplo, SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9 é um identificador Transact-SQL formado pelo prefixo SQLWEP_ e uma GUID. SQLWEP cria uma nova GUID para cada identificador. O valor A7E5521A-1CA6-4741-865D-826F804E5135 na cláusula TO SERVICE é o GUID que identifica a instância do agente no banco de dados msdb.

Para obter mais informações sobre como trabalhar com WQL, consulte Usando o WQL com o Provedor WMI para eventos de servidor.

Os aplicativos de gerenciamento direcionam o Provedor WMI para Eventos de Servidor para uma instância do SQL Server conectando-se a um namespace WMI definido pelo provedor. O serviço Windows WMI mapeia esse namespace para o DLL do provedor, Sqlwep.dll, e carrega-o na memória. O provedor gerencia um namespace do WMI para Eventos do Servidor para cada instância do SQL Server, e o formato é: \\.\root\Microsoft\SqlServer\ServerEvents\nome_da_instância, em que nome_da_instância assume MSSQLSERVER como padrão. Para obter mais informações sobre como se conectar a um namespace do WMI para uma instância do SQL Server, consulte Trabalhando com o Provedor WMI para Eventos de Servidor.

A DLL do provedor, Sqlwep.dll, é carregada apenas uma vez no serviço de host WMI do sistema operacional do servidor, independentemente de quantas instâncias do SQL Server estão no servidor.

Para obter um exemplo de um aplicativo de gerenciamento do SQL Server Agent que use o Provedor WMI para Eventos de Servidor, consulte Exemplo: Criação de um alerta do SQL Server Agent usando o provedor WMI para eventos do servidor. Para obter um exemplo de um aplicativo de gerenciamento que use o Provedor WMI para Eventos do Servidor no código gerenciado, consulte Exemplo: Usando o provedor de eventos de WMI com o .NET Framework. Mais informações sobre o WMI também estão disponíveis no Microsoft.NET Framework SDK.