Entender 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 dos eventos cobertos pelo SQL Server Agent em relação às 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 Conceitos de Provedor WMI para Eventos de Servidor. Os eventos que podem ser consultados estão listados em Provedor WMI para classes e propriedades de Eventos de Servidor.
Quando ocorre um evento que aciona 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 msdb
WMIEventProviderNotificationQueue
. (O serviço e a fila são criados dinamicamente pelo provedor quando ele se conecta pela primeira vez ao SQL Server.) Em seguida, o provedor lê os dados de evento dessa fila e os transforma em MOF (formato de objeto gerenciado) antes de retorná-los ao aplicativo. A ilustração a seguir mostra este processo.
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 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 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 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 WMI do Windows mapeia esse namespace para a DLL sqlwep.dll
do provedor e o carrega na memória. O provedor gerencia um namespace WMI para Eventos de Servidor para cada instância do SQL Server, e o formato é , onde <instance_name>
o padrão é .MSSQLSERVER
\\.\<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, 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 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 o WMI no SDK do Microsoft .NET Framework.