Compreender o provedor WMI para eventos de servidor

Aplica-se a:SQL Server

O Provedor WMI para Eventos do Servidor permite o uso da WMI (Instrumentação de Gerenciamento do Windows) 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 evento 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 cobertos pelo SQL Server Agent em versões anteriores.

Aplicativos de gerenciamento, como o SQL Server Agent, podem acessar eventos do 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 no SQL Server, consulte Provedores WMI para conceitos de eventos de servidor. Os eventos que podem ser consultados estão listados em classes e propriedades do Provedor WMI para Eventos do 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 qual é chamado SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. O serviço coloca o evento em uma fila predefinida chamada msdbWMIEventProviderNotificationQueue. (O serviço e a fila são criados dinamicamente pelo provedor quando ele se conecta ao SQL Server pela primeira vez.) Em seguida, o provedor lê os dados de evento dessa fila e os transforma em formato de objeto gerenciado (MOF) antes de retorná-los ao aplicativo. A ilustração a seguir mostra este processo.

Flow diagram of the WMI Provider for Server Events.

Por exemplo, considere a seguinte Consulta WQL:

SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks2022';

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 AdventureWorks2022;
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 que é 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 broker no msdb banco de dados.

Para obter mais informações sobre como trabalhar com o WQL, consulte Usando o WQL com o provedor WMI para eventos do 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 WMI do Windows mapeia esse namespace para a DLL sqlwep.dlldo provedor e o carrega na memória. O provedor gerencia um namespace WMI para Eventos do Servidor para cada instância do SQL Server, e o formato é , onde <instance_name> o MSSQLSERVERpadrão é \\.\<root>\Microsoft\SqlServer\ServerEvents\<instance_name>. Para obter mais informações sobre como se conectar a um namespace WMI para uma instância do SQL Server, consulte Usando WQL com o provedor WMI para eventos de servidor.

A DLL do provedor, , é carregada apenas uma vez no serviço de host WMI do sistema operacional do servidor, sqlwep.dllindependentemente 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 usa o provedor WMI para eventos de servidor, consulte Exemplo: criar um alerta do SQL Server Agent com o provedor WMI. Para obter um exemplo de um aplicativo de gerenciamento que usa o provedor WMI para eventos de servidor em código gerenciado, consulte Exemplo: usar o provedor de eventos WMI com o .NET Framework. Mais informações também estão disponíveis sobre WMI no SDK do Microsoft .NET Framework.