Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Microsoft SQL Server 2005 для администраторов
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

9.4.8. Работа с WMI Provider for Server Events

Поставщик WMI Provider for Server Events, обращение к Service Broker, метод WQLEventQuery(), объект ManagementEventWatcher

WMI Provider for Server Events — это специальный поставщик WMI, основная задача которого заключается в предоставлении доступа через стандартный программный интерфейс WMI к уведомлениям о событиях (event notifications). Про уведомления о событиях будет рассказываться в разд. 11.2.5. Здесь только отметим, что при помощи уведомлений о событиях можно производить мониторинг событий двух видов: событий DDL и событий трассировки. События DDL связаны с созданием, изменением и удалением объектов базы данных. События трассировки — это те события, которые можно отследить средствами SQL Server Profiler (см. разд. 11.2.3). Событий трассировки очень много. В качестве примеров таких событий можно привести подключение пользователя к серверу, изменение размера базы данных или журнала транзакций, выполнение запроса или запуск на выполнение хранимой процедуры, возникновение взаимоблокировки, пользовательской или системной ошибки и т. п.

WMI Provider for Server Events — это всего лишь внешняя программная оболочка, поэтому при выполнении запроса к объектам этого поставщика создается уведомление о событиях в соответствующей базе данных. При возникновении события сообщение о нем в формате XML помещается в очередь Service Broker. Поэтому для работы с этим поставщиком WMI необходимо обязательно включить Service Broker. Если вы собираетесь отслеживать события для конкретной базы данных, то нужно включить Service Broker для нее, а если вы планируете отслеживать события на уровне всего сервера, то вам потребуется включить Service Broker для базы данных msdb. Просмотреть информацию о том, для каких баз данных включен Service Broker, можно при помощи запроса:

USE master;

GO

SELECT name, is_broker_enabled FROM sys.databases;

Если Service Broker отключен для нужной базы данных, то включить его можно командой ALTER DATABASE, например:

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

Работу с WMI Provider for Server Events можно проиллюстрировать на простом примере. Предположим, что вы хотите производить мониторинг всех изменений в структуре любой таблицы базы данных DB1 на сервере LONDON2\SQL2005 и сразу же получать информацию об имени изменившейся таблицы, имени пользователя, который внес изменения, и команде Transact-SQL, которая произвела это изменение. Создать приложение, которое будет реагировать на такое изменение, можно следующим образом.

Первое, что нужно сделать, — создать новый проект .NET. Достаточно выбрать самый простой вариант и воспользоваться шаблоном для языка Visual Basic.NET, который называется Console Application (Консольное приложение).

Далее нужно добавить в проект ссылку на сборку с необходимыми классами для работы с WMI. Для этого в меню Project (Проект) в Visual Studio.NET выберите команду Add Reference, на вкладке .NET выберите пространство имен System.Management и нажмите кнопку OK.

После того как ссылка будет добавлена, можно приступать к созданию программного кода. Весь программый код модуля Module1.vb, может выглядеть так:

Imports System

Imports System.Management

 

Module Module1

Sub Main()

    'Создаем объект диапазона и подключаемся к пространству имен

    'WMI Provider for Server Events на локальном сервере

    'для экземпляра SQL2005

    Dim oScope As New ManagementScope("\\.\root\Microsoft\SqlServer\ServerEvents\SQL2005")

    oScope.Connect()

    'Определяем объект событийного запроса WQL

    Dim oQuery As New WqlEventQuery("SELECT * FROM ALTER_TABLE WHERE DatabaseName = 'DB1'")

    'Определяем объект наблюдателя за событием и

    'передаем ему запрос

    Dim oWatcher As New ManagementEventWatcher(oQuery)

    'Определяем диапазон наблюдения для объекта наблюдателя

    oWatcher.Scope = oScope

    'Сигнализируем о начале наблюдения

    Console.WriteLine("Начинаем мониторинг")

    Dim oBaseObject As ManagementBaseObject

    'Начинаем перехват событий в бесконечном цикле

    Dim i As Integer

    i = 0

    Do While i = 0

    oBaseObject = oWatcher.WaitForNextEvent()

    'Выводим нужные свойства объекта, для которого произошло событие

    Console.WriteLine(oBaseObject.Properties("ObjectName").Value & _

        vbCrLf & oBaseObject.Properties("TSQLCommand").Value)

    Loop

    End Sub

End Module

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 
© 2004-2008, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru