Share via


Informazioni sul provider WMI per eventi del server

Il provider WMI per eventi del server consente di utilizzare il servizio Strumentazione gestione Windows (WMI) per monitorare eventi in SQL Server. Questo provider converte SQL Server in un oggetto WMI gestito. Qualsiasi evento che può generare una notifica degli eventi in SQL Server può essere utilizzato da WMI tramite questo provider. Come applicazione di gestione che interagisce con WMI, inoltre, SQL Server Agent può rispondere a tali eventi, espandendo l'ambito degli eventi gestiti rispetto alle versioni precedenti di SQL Server Agent.

Le applicazioni di gestione come SQL Server Agent possono accedere a eventi di SQL Server utilizzando il provider WMI per eventi del server ed 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 ulteriori informazioni sul funzionamento delle notifiche degli eventi in SQL Server, vedere Notifiche degli eventi (Motore di database). Gli eventi sui cui è possibile eseguire query sono elencati in Classi e proprietà del provider WMI per eventi del server.

Quando si verifica un evento che attiva l'invio di un messaggio tramite notifica degli eventi, il messaggio viene recapitato a un servizio di destinazione predefinito in msdb denominato SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. Il servizio inserisce l'evento in una coda predefinita in msdb denominata WMIEventProviderNotificationQueue. Sia il servizio sia la coda vengono creati dinamicamente dal provider quando si connette per la prima volta a SQL Server. Il provider legge quindi i dati degli eventi dalla coda e li trasforma in dati MOF (Managed Object Format) prima di restituirli all'applicazione client. Questo processo viene illustrato nella figura seguente.

Diagramma di flusso del provider WMI per gli eventi del server

Si consideri, ad esempio, la query WQL seguente:

SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks'

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

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

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 clausola TO SERVICE corrisponde al GUID che identifica l'istanza di Service Broker nel database msdb.

Per ulteriori informazioni su come utilizzare WQL, vedere Utilizzo di WQL con il provider WMI per eventi del server.

Le applicazioni di gestione indirizzano il provider WMI per eventi del server a un'istanza di SQL Server connettendosi a uno spazio dei nomi WMI definito dal provider. Il servizio Windows WMI esegue il mapping di questo spazio dei nomi alla DLL del provider, Sqlwep.dll, e lo carica in memoria. Il provider gestisce uno spazio dei nomi WMI per eventi del server per ogni istanza di SQL Server con formato \\.\radice\Microsoft\SqlServer\ServerEvents\nome_istanza, dove nome_istanza viene impostato sul valore predefinito MSSQLSERVER. Per ulteriori informazioni su come connettersi a uno spazio dei nomi WMI per un'istanza di SQL Server, vedere Utilizzo del provider WMI per eventi del server.

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

Per un esempio di un'applicazione di gestione di SQL Server Agent che utilizza il provider WMI per eventi del server, vedere Esempio: Creazione di un avviso di SQL Server Agent tramite il provider WMI per eventi del server. Per un esempio di un'applicazione di gestione che utilizza il provider WMI per eventi del server in codice gestito, vedere Esempio: Utilizzo del provider di eventi WMI con .NET Framework. Ulteriori informazioni su WMI sono disponibili anche in Microsoft.NET Framework SDK.