Поделиться через


Общие сведения о поставщике WMI для событий сервера

Область применения: SQL Server

Поставщик WMI для событий сервера позволяет использовать инструментарий управления Windows (WMI) для мониторинга событий в SQL Server. Поставщик работает, превратив SQL Server в управляемый объект WMI. Любое событие, которое может создать уведомление о событии в SQL Server, может использоваться WMI с помощью этого поставщика. Кроме того, в качестве приложения управления, взаимодействующего с WMI, агент SQL Server может реагировать на эти события, увеличивая область событий, охватываемых агент SQL Server более ранних выпусков.

Приложения управления, такие как агент SQL Server, могут получать доступ к событиям SQL Server с помощью поставщика WMI для событий сервера, выдавая инструкции WQL. WQL является упрощенным подмножеством языка SQL с некоторыми расширениями, специфичными для WMI. При использовании языка WQL приложение получает тип события для определенной базы данных или объекта базы данных. Поставщик WMI для событий сервера преобразовывает запрос в уведомление о событии, создавая уведомление в базе данных-получателе. Дополнительные сведения о том, как работают уведомления о событиях в SQL Server, см. в разделе "Поставщик WMI для событий сервера". События, которые можно запрашивать, перечислены в поставщике WMI для классов и свойств событий сервера.

При возникновении события, которое активирует уведомление о событии для отправки сообщения, сообщение переходит в предопределенную целевую службу, которая msdb называется SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. Служба помещает событие в предопределенную очередь, которая msdb называется WMIEventProviderNotificationQueue. (Служба и очередь создаются динамически поставщиком при первом подключении к SQL Server.) Затем поставщик считывает данные события из этой очереди и преобразует его в формат управляемого объекта (MOF) перед возвращением в приложение. На следующем рисунке показан этот процесс.

Схема потока поставщика WMI для событий сервера.

Например, рассмотрим следующий WQL-запрос.

SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks2022';

В ответе на этот запрос поставщик WMI для событий сервера создает соответствующее уведомление о событии в базе данных-получателе:

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

В этом примере SQLWEP_76CF38C1_18BB_42DD_A7DC_C8820155B0E9 — это идентификатор Transact-SQL, состоящий из префикса SQLWEP_ и GUID. SQLWEP создает новый идентификатор GUID для каждого идентификатора. Значением A7E5521A-1CA6-4741-865D-826F804E5135 в предложении TO SERVICE является GUID, определяющий экземпляр брокера в msdb базе данных.

Дополнительные сведения о работе с WQL см. в разделе "Использование WQL" с поставщиком WMI для событий сервера.

Приложения управления направляют поставщика WMI для событий сервера к экземпляру SQL Server путем подключения к пространству имен WMI, определенному поставщиком. Служба WMI Windows сопоставляет это пространство имен с библиотекой DLL sqlwep.dllпоставщика и загружает ее в память. Поставщик управляет пространством имен WMI для событий сервера для каждого экземпляра SQL Server, а формат — \\.\<root>\Microsoft\SqlServer\ServerEvents\<instance_name>значение <instance_name> по умолчанию MSSQLSERVER. Дополнительные сведения о подключении к пространству имен WMI для экземпляра SQL Server см. в статье Об использовании WQL с поставщиком WMI для событий сервера.

Библиотека DLL sqlwep.dllпоставщика загружается только один раз в службу узла WMI операционной системы сервера независимо от количества экземпляров SQL Server на сервере.

Пример приложения управления агент SQL Server, использующего поставщика WMI для событий сервера, см. в примере: создание оповещения агент SQL Server с помощью поставщика WMI. Пример приложения управления, использующего поставщика WMI для событий сервера в управляемом коде, см. в примере: использование поставщика событий WMI с платформа .NET Framework. Дополнительные сведения о WMI также доступны в пакете SDK для Microsoft платформа .NET Framework.