Compartilhar via


Compreendendo o Provedor WMI para eventos do servidor

O Provedor WMI para Eventos de Servidor permite que você use a WMI (Instrumentação de Gerenciamento do Windows) para monitorar eventos em SQL Server. O provedor funciona transformando SQL Server em um objeto WMI gerenciado. Qualquer evento que possa gerar uma notificação de evento em SQL Server pode ser aproveitado pela WMI usando esse provedor. Além disso, como um aplicativo de gerenciamento que interage com o WMI, SQL Server Agent pode responder a esses eventos, aumentando o escopo dos eventos cobertos por SQL Server Agent em versões anteriores.

Aplicativos de gerenciamento como SQL Server Agent podem acessar eventos SQL Server usando o Provedor WMI para Eventos de Servidor emitindo instruções WQL (WMI Query Language). 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 eventos funcionam em SQL Server, consulte Conceitos de provedor WMI para eventos de servidor. Os eventos que podem ser consultados são listados em Provedor WMI para Classes e Propriedades de Eventos de Servidor.

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

Diagrama de fluxo do 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 composto pelo prefixo SQLWEP_ e um GUID. SQLWEP cria um novo GUID para cada identificador. O valor A7E5521A-1CA6-4741-865D-826F804E5135 na TO SERVICE cláusula é o GUID que identifica a instância do agente no banco de dados msdb .

Para obter mais informações sobre como trabalhar com o WQL, consulte Usando 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 de 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 WMI para Eventos de Servidor para cada instância de SQL Server e o formato é: \\.\root\Microsoft\SqlServer\ServerEvents\instance_name, em que instance_name usa como padrão MSSQLSERVER. Para obter mais informações sobre como se conectar a um namespace WMI para uma instância de SQL Server, consulte Usando wql com o provedor WMI para eventos de servidor.

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

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

Consulte Também

Provedor WMI para conceitos de eventos de servidor