Основные сведения о поставщике WMI для событий сервера
Поставщик инструментария WMI для событий сервера позволяет использовать инструментарий управления Windows (WMI) для наблюдения за событиями в SQL Server. В ходе своей работы поставщик преобразует SQL Server в управляемый объект инструментария WMI. Этот поставщик позволяет инструментарию WMI использовать все события, которые могут формировать уведомления о событии в SQL Server. Кроме того, агент SQL Server, играя роль управляющего приложения, взаимодействующего с инструментарием WMI, может реагировать на эти события, расширяя область событий, охватываемых агентом SQL Server предыдущих версий.
Управляющие приложения, такие как агент SQL Server, могут получать доступ к событиям SQL Server с помощью поставщика WMI для событий сервера путем выполнения инструкций WMI Query Language (WQL). WQL является упрощенным подмножеством языка SQL с некоторыми расширениями, специфичными для WMI. При использовании языка WQL приложение получает тип события для определенной базы данных или объекта базы данных. Поставщик WMI для событий сервера преобразовывает запрос в уведомление о событии, создавая уведомление в базе данных-получателе. Дополнительные сведения о работе уведомлений о событиях в SQL Server см. в разделе Уведомления о событиях (компонент Database Engine). События, которые можно запросить, перечислены в поставщике WMI для классов событий и свойств сервера.
При возникновении события, приводящего к созданию уведомления о событии и отправке сообщения, сообщение направляется в стандартную целевую службу в msdb, называемую SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. Служба помещает событие в стандартную очередь в msdb с именем WMIEventProviderNotificationQueue. (Служба и очередь создаются динамически при первом подключении поставщика к SQL Server.) Затем поставщик считывает сведения о событии из этой очереди и преобразует их в формат управляющих объектов (MOF), прежде чем возвращать их приложению. На следующем рисунке показан этот процесс.
Например, рассмотрим следующий WQL-запрос.
SELECT * FROM DDL_DATABASE_LEVEL_EVENTS
WHERE DatabaseName = 'AdventureWorks2008R2'
В ответе на этот запрос поставщик WMI для событий сервера создает соответствующее уведомление о событии в базе данных-получателе:
USE AdventureWorks2008R2 ;
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, определяющим экземпляр компонента Service Broker в базе данных msdb.
Дополнительные сведения о работе с WQL см. в разделе Использование WQL с поставщиком WMI для событий сервера.
Приложения для управления направляют поставщик WMI для событий сервера на экземпляр SQL Server путем соединения с пространством имен WMI, определенном поставщиком. Служба Windows WMI сопоставляет это пространство имен с файлом поставщика Sqlwep.dll и загружает его в память. Поставщик управляет пространством имен WMI для событий сервера для каждого экземпляра SQL Server, Пространство имен имеет следующий формат: \\.\корень\Microsoft\SqlServer\ServerEvents\имя_экземпляра, где имя_экземпляра по умолчанию равно MSSQLSERVER. Дополнительные сведения о соединении с пространством имен WMI для получения экземпляра SQL Server см. в разделе Работа с поставщиком WMI для событий сервера.
Библиотека поставщика Sqlwep.dll загружается в службу WMI в операционной системе сервера только один раз независимо от количества экземпляров SQL Server, находящихся на сервере.
Пример приложения агента управления SQL Server, использующего поставщик WMI для событий сервера, см. в разделе Образец. Создание предупреждения агента SQL Server при помощи поставщика WMI для событий сервера. Пример приложения для управления, использующего поставщик WMI для событий сервера в управляемом коде, см. в разделе Образец. Использование поставщика событий WMI с платформой .NET Framework. Дополнительные сведения о WMI также доступны в пакете Microsoft .NET Framework SDK.