|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
10.19. WMI Data Reader Task и WMI Event Watcher TaskWMI Data Reader Task и WMI Event Watcher Task в SSIS SQL Server 2005, WMI Connection Manager, обработчики событий (Event Handlers) в SSIS Задачи WMI Data Reader Task и WMI Event Watcher Task предназначены для использования в пакетах SSIS возможностей объектной модели WMI. Подробно про эту объектную модель рассказывалось в разд. 9.4. Обе этих задачи требуют наличия в пакете WMI Connection Manager. WMI Data Reader Task предназначена для выполнения в ходе работы пакета запроса к объектам WMI на локальном или удаленном компьютере. Затем результаты выполнения этого запроса можно использовать для других задач пакета. Например, вы можете выяснить, запущен ли на компьютере тот или иной процесс, есть ли определенный файл или каталог на диске, что в настоящее время показывает определенный счетчик производительности, сколько осталось места на диске и т. п. В самой объектной модели WMI сотни объектов, но задача WMI Data Reader Task относится к категории самых простых. Для нее необходимо указать используемый WMI Connection Manager, запрос на языке WQL (и откуда он будет браться — просто из свойств задачи, из файла на диске или из переменной), тип возвращаемых данных (табличный набор записей, пары имя свойства/значение или просто скалярное значение), и где будут сохраняться результаты запроса (в файле на диске или в переменной пакета). Задача WMI Event Watcher Task также предназначена для выполнения запросов WMI и для работы с полученными результатами. Однако эта задача работает со специальным типом запросов — с событийными запросами WMI (см. разд. 9.4.6). Ее можно использовать, например, когда нужно, чтобы выполнение пакета продолжилось с определенной точки после того, как на диске появится файл с определенным именем, или завершит работу какой-то процесс (который, например, разархивировал файл данных), и т. п. Если WMI Data Reader Task может просто проверять это же самое на определенный момент времени, то WMI Event Watcher Task опрашивает объекты WMI с указанным вами интервалом, и если интересующее вас событие произошло, генерирует событие пакета SSIS. Обработку такого события можно настроить на вкладке Event Handlers в SSIS Designer. Поскольку применение WMI Event Watcher Task может быть очень удобным, а опыта работы с ним у большинства администраторов нет, проиллюстрируем работу с этой задачей на простом примере. Предположим, что вам нужно отследить, когда на вашем компьютере завершит работу процесс с именем WinRAR.exe, и сразу после этого нужно выполнить какие-то действия в пакете SSIS. Для простоты эти действия будет выполнять задача Script Task, которая просто выводит стандартное окно сообщения. Решение задачи может выглядеть так: 1. Создайте новый пустой пакет SSIS. 2. Перетащите на вкладку Control Flow из Toolbox элемент WMI Event Watcher Task и откройте его свойства (команда Edit контекстного меню), а затем перейдите на вкладку WMI Options (Параметры WMI). 3. В списке рядом со свойством WmiConnection (Соединение WMI) выберите пункт New WMI Connection (Новое соединение WMI) и настройте свойства создаваемого менеджера подключений WMI Connection Manager. Если вы будете производить мониторинг завершения процесса на локальном компьютере, параметры WMI Connection Manager могут выглядеть так, как представлено на рис. 10.10.
Рис. 10.10. Настройка WMI Connection Manager 4. Выберите нужный источник запроса при помощи свойства WmiQuerySourceType (Тип источника запроса WMI) (в этом примере будем использовать самый простой вариант — Direct Input), а затем введите текст запроса как значение для свойства WqlQuerySource (Источник запроса WQL). В данном случае текст запроса может быть таким: SELECT * FROM __instancedeletionevent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'WinRAR.exe' Этот запрос с интервалом в 1 секунду будет опрашивать объект Win32_Process на предмет завершения работы процесса с именем 'WinRAR.exe'. В реальной (не демонстрационной, как здесь) ситуации можно было бы сделать интервал опроса больше (например, 10 секунд), чтобы снизить расход системных ресурсов. 5. Для свойства ActionAtEvent (Действие при наступлении события) настройте значение Log the event and fire the SSIS Event (Запротоколировать событие и запустить событие SSIS), чтобы при возникновении события WMI информация о нем не только записывалась в протокол выполнения пакета, но и срабатывало бы событие пакета. Для остальных свойств задачи WMI Event Watcher Task можно оставить значения по умолчанию. 6. Следующее, что вам потребуется сделать, — перейти в WMI Designer на вкладку Event Handlers. На ней в списке Executable нужно выбрать WMI Event Watcher Task, а в списке Event Handler (Обработчик события) — событийную процедуру WMIEventWatcherEventOccured. Далее щелкните мышью по ссылке Click here to create a "WMIEventWatcherEventOccured" event handler... (Щелкните здесь для создания обработчика события "WMIEventWatcherEventOccured"...). 7. Последнее, что вам осталось сделать, — настроить реакцию на событие в виде задачи Script Task. Для этого нужно перетащить из Toolbox на открывшееся розовое поле на вкладке Event Handlers задачу Script Task и настроить ее свойства. На вкладке Script свойств этой задачи нужно нажать кнопку Design Script и ввести требуемый код для процедуры Main(). Он может быть, например, таким: Public Sub Main() MsgBox("Сработало событие WMI!") Dts.TaskResult = Dts.Results.Success End Sub После этого можно запускать пакет на выполнение. Запущенный пакет может работать неопределенное время, расходуя минимальное количество системных ресурсов. Как только вы запустите и потом закроете WinRAR (у вас настроена реакция на закрытие этого приложения), сразу же сработает событийная процедура со Script Task (рис. 10.11).
Рис. 10.11. Ваш пакет среагировал на завершение разархивирования
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||