Condividi tramite


Informazioni sul provider WMI per gli eventi del server

Si applica a:SQL Server

Il provider WMI per gli eventi del server consente di usare Strumentazione gestione Windows (WMI) per monitorare gli eventi in SQL Server. Il provider funziona trasformando SQL Server in un oggetto WMI gestito. Qualsiasi evento in grado di generare una notifica degli eventi in SQL Server può essere sfruttato da WMI tramite questo provider. Inoltre, come applicazione di gestione che interagisce con WMI, SQL Server Agent può rispondere a questi eventi, aumentando l'ambito degli eventi coperti da SQL Server Agent nelle versioni precedenti.

Le applicazioni di gestione, ad esempio SQL Server Agent, possono accedere agli eventi di SQL Server usando il provider WMI per gli eventi del server eseguendo istruzioni WQL (WMI Query Language). WQL è un subset semplificato del linguaggio SQL (Structured Query Language), con alcune estensioni specifiche di WMI. Utilizzando WQL, un'applicazione recupera un tipo di evento rispetto a un database o a un oggetto di database specifico. Il provider WMI per eventi del server converte la query in una notifica degli eventi, creando in modo efficace una notifica degli eventi nel database di destinazione. Per altre informazioni sul funzionamento delle notifiche degli eventi in SQL Server, vedere Concetti relativi al provider WMI per gli eventi del server. Gli eventi su cui è possibile eseguire query sono elencati nelle classi e nelle proprietà del provider WMI per gli eventi del server.

Quando si verifica un evento che attiva la notifica dell'evento per inviare un messaggio, il messaggio passa a un servizio di destinazione predefinito in msdb denominato SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. Il servizio inserisce l'evento in una coda predefinita denominata msdbWMIEventProviderNotificationQueue. Il servizio e la coda vengono creati in modo dinamico dal provider quando si connette per la prima volta a SQL Server. Il provider legge quindi i dati dell'evento da questa coda e lo trasforma in formato MOF (Managed Object Format) prima di restituirli all'applicazione. Questo processo viene illustrato nella figura seguente.

Flow diagram of the WMI Provider for Server Events.

Si consideri, ad esempio, la query WQL seguente:

SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks2022';

In risposta alla query, il provider WMI per eventi del server crea la notifica degli eventi equivalente nel database di destinazione:

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

In questo esempio è SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9 un identificatore Transact-SQL costituito dal prefisso SQLWEP_ e da un GUID. SQLWEP crea un nuovo GUID per ogni identificatore. Il valore A7E5521A-1CA6-4741-865D-826F804E5135 nella TO SERVICE clausola è il GUID che identifica l'istanza del broker nel msdb database.

Per altre informazioni sull'uso di WQL, vedere Uso di WQL con il provider WMI per gli eventi del server.

Le applicazioni di gestione indirizzano il provider WMI per gli eventi del server a un'istanza di SQL Server connettendosi a uno spazio dei nomi WMI definito dal provider. Il servizio WMI di Windows esegue il mapping di questo spazio dei nomi alla DLL del provider e sqlwep.dlllo carica in memoria. Il provider gestisce uno spazio dei nomi WMI per gli eventi del server per ogni istanza di SQL Server e il formato è \\.\<root>\Microsoft\SqlServer\ServerEvents\<instance_name>, dove <instance_name> per impostazione predefinita è MSSQLSERVER. Per altre informazioni su come connettersi a uno spazio dei nomi WMI per un'istanza di SQL Server, vedere Uso di WQL con il provider WMI per gli eventi del server.

La DLL del provider, sqlwep.dll, viene caricata una sola volta nel servizio host WMI del sistema operativo del server, indipendentemente dal numero di istanze di SQL Server nel server.

Per un esempio di applicazione di gestione di SQL Server Agent che usa il provider WMI per gli eventi del server, vedere Esempio: Creare un avviso di SQL Server Agent con il provider WMI. Per un esempio di applicazione di gestione che usa il provider WMI per gli eventi del server nel codice gestito, vedere Esempio: Usare il provider di eventi WMI con .NET Framework. Altre informazioni sono disponibili anche su WMI in Microsoft .NET Framework SDK.