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

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


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

8.1.3. Работа с заданиями SQL Server Agent

Задания (jobs) SQL Server Agent, этапы ActiveX Script, Operation System (CmdExec), Transact-SQL Script (T-SQL), SQL Server Integration Services Package, расписания, алгоритмизация выполнения заданий

Задания (jobs) — это наиболее часто используемое средство автоматизации административных операций. Задания можно определить как именованные наборы действий, которые можно запланировать для выполнения по расписанию (а можно выполнять и вручную). На многих рабочих серверах на предприятиях существует сложная система заданий, при помощи которых выполняется множество операций: резервное копирование, проверка целостности, дефрагментация и перестроение индексов, загрузка и выгрузка данных, генерация страниц HTML и т. п. Задания могут создаваться и в автоматическом режиме, например, при настройке доставки журналов или репликации.

Работа с заданиями обычно производится из контейнера Jobs в SQL Server Agent. Создать новое задание можно при помощи команды New Job (Новое задание) из контекстного меню для контейнера Jobs. Откроется окно, аналогичное представленному на рис. 8.1, в котором вам потребуется настроить свойства задания. Подробно про работу со свойствами задания будет рассказано ниже в этом разделе:

Рис. 8.1. Окно свойств задания SQL Server Agent

Очень часто возникает необходимость скопировать задания с одного сервера на другой, чтобы упростить автоматизацию выполнения схожих операций. Проще всего сделать это так: в контекстном меню для созданного задания нужно выбрать команду Script Job As | CREATE TO | New Query Editor Window (Отскриптовать задание как | Создать | Новое окно редактора запросов). В результате в окно редактора кода будет загружен скрипт с командами на создание задания с аналогичными параметрами. Вам останется только исправить некоторые параметры в этом скрипте, сохранить его и запустить на выполнение на другом сервере.

Этот же способ можно использовать и для получения информации о хранимых процедурах, которые можно использовать для создания заданий из кода Transact-SQL. Их синтаксис достаточно сложен и рассматриваться здесь не будет.

Теперь рассмотрим параметры, которые можно настроить для создаваемого задания. На вкладке General вы можете настроить или просмотреть общие параметры для задания:

q      Name (Имя) — это, конечно, имя для создаваемого задания. Ему совершенно не обязательно соответствовать правилам именования объектов SQL Server. Используйте любое удобное для вас словосочетание;

q      Owner (Владелец) — владелец данного задания. По умолчанию владельцем становится тот пользователь, который это задание создал. Информация о владельце обычно используется для определения прав, с которыми задание может выполнять различные действия на SQL Server, а также по владельцу можно производить фильтрацию при создании отчетов о выполнении заданий;

q      Category (Категория) — этот параметр ни на что не влияет. Используется для группировки заданий и для их сортировки при отображении в Management Studio;

q      Description (Описание) — простое описание задания, например заметки, которые администратор делает для самого себя, чтобы не забыть, для чего предназначено это задание;

q      Enabled (Включено) — если задание в настоящее время вам не нужно, но может потребоваться потом, вы можете просто снять этот флажок. Отключенное задание выполняться не будет. Можно также отключить расписание для этого задания;

q      Source (Источник) — в этом параметре можно просмотреть сервер, который запускает данное задание на выполнение (master server). Параметр используется только для мультисерверных заданий (которые могут выполняться на разных серверах). Подробнее про мультисерверные задания будет рассказываться в разд. 8.1.6;

q      Created (Создано), Last modified (Изменено в последний раз), Last Executed (Запускалось в последний раз) — это, соответственно, время создания, время последнего изменения и время последнего запуска на выполнение для задания.

На вкладке Steps (Этапы) производится самая важная часть настройки заданий. Здесь нужно будет определить этапы (steps), т. е. действия, из которых состоит задание. Создание этапа производится при помощи кнопки New (Новый). Вам потребуется указать имя создаваемого этапа и выбрать его тип. Если отбросить типы этапов, которые начинаются с префикса Replication (задания с такими этапами практически всегда создаются автоматически при настройке репликации), то в вашем распоряжении следующие варианты:

q      ActiveX Script (Скрипт ActiveX) — это самый функциональный тип этапа. Фактически при помощи этого типа этапа вы можете сделать на SQL Server и в операционной системе (не только на локальных, но и на удаленных компьютерах) абсолютно все (включая возможности любых других типов этапов). Для работы с SQL Server в вашем распоряжении имеются объектные модели SQL-DMO, SMO и поставщика WMI для SQL Server (речь о них пойдет в модуле 9), для работы с операционной системой — объектные модели Windows Script Host, Scripting Runtime, WMI и т. п. Исходной точкой для их освоения может стать сайт www.microsoft.com/scripting.

Отметим некоторые моменты, связанные с этим типом этапов:

·                скрипты можно создавать на любом COM-совместимом скриптовом языке. По умолчанию в Windows 2000 и Windows 2003 Server встроены интерпретаторы только для VBScript и JavaScript, но если ваш любимый язык — Perl или TCL, то вам ничего не мешает установить на сервер интерпретатор для этого языка и использовать именно его;

·                если вам нужны программные конструкции — циклы, проверки значений и т. п., то нужно использовать этот тип этапа;

·                лучше всего, конечно, вначале написать и отладить скрипт при помощи специализированного средства (например, Sapien PrimalScript), а затем скопировать его в окно свойств этапа;

q      Operation System (CmdExec) (Команда операционной системы) — этот тип задания позволяет просто выполнить какую-либо команду из командной строки операционной системы и проверить для нее код возврата. Это намного менее функциональный тип этапа по сравнению со скриптом ActiveX, но его могут использовать администраторы, которые не знают никаких скриптовых языков программирования. Обычное применение этапов этого типа — копирование файлов в операционной системе, отправка электронной почты из командной строки, подключение сетевых дисков и т. п.;

q      Transact-SQL Script (T-SQL) (Скрипт Transact-SQL) — это, вероятно, самый распространенный тип этапа (выбирается по умолчанию). Как понятно из названия, он позволяет выполнить на сервере набор команд Transact-SQL. На самом деле, как и при помощи скриптов ActiveX, в заданиях этого типа тоже можно сделать абсолютно все. Доступ к обычным объектным моделям Windows из кода Transact-SQL можно получить при помощи хранимых процедур автоматизации (SP_OACreate, SP_OAMethod и т. п.), а к сборкам .NET можно обратиться при помощи новой возможности SQL Server 2005 — подсистемы CLR integration. Чаще всего этот тип этапа используется для резервного копирования баз данных, проверки целостности с использованием команд DBCC, дефрагментации и перестроения индексов и т. п.;

q      SQL Server Integration Services Package (Пакет SQL Server Integration Services) — этот тип этапов позволяет выполнить по расписанию пакет SSIS (DTS). Это новый тип этапа, которого не было в SQL Server 2000 (в нем пакеты DTS можно было запускать из этапа CmdExec при помощи утилиты командной строки dtsrun). Функциональность пакетов SSIS также очень велика. Подробнее про работу с SSIS будет рассказано в модуле 10;

q      SQL Server Analysis Services Command (Команда SQL Server Analysis Services) и SQL Server Analysis Services Query (Запрос SQL Server Analysis Services) — эти типы задания позволяют выполнить, соответственно, команду или запрос к Analysis Services (ядру баз данных OLAP на SQL Server).

У каждого этапа есть свой набор свойств (в основном очевидных). Рассмотрим только те из них, которые являются общими для большинства типов этапов. На вкладке General, кроме параметров, специфичных для данного типа этапа, вы можете настроить параметр Run as (Запустить как), которые позволяет запустить этап от имени определенной учетной записи (со своими правами). В соответствующем списке будут доступны SQL Agent Service Account (учетная запись службы SQL Server Agent, т. е. этап будет запускаться от имени той учетной записи, под которой работает SQL Server Agent) и учетные записи-прокси, которые созданы для этапа данного типа из контейнера SQL Server Agent | Proxies. Для создания учетной записи прокси вам потребуется вначале определить объект Credential из контейнера Security | Credentials. Подробно про эти возможности будет рассказано в разд. 8.1.4.

Другие важные свойства для этапов можно определить при помощи вкладки Advanced:

q      On success action (Действие при успехе) и On failure action (Действие при сбое) — эти параметры позволяют определить, что должно произойти, соответственно, после успешного или неуспешного (возникла ошибка) выполнения этого этапа. В вашем распоряжении три варианта (они одинаковые как для успешного завершения, так и для неуспешного):

·                Go to the next step (Перейти к следующему этапу) — этот вариант используется по умолчанию для успешно завершившихся этапов;

·                Quit the job reporting success (Выйти из задания, просигнализировав об успешном выполнении) — этот вариант предлагается использовать для последнего этапа, если он завершился успешно;

·                Quit the job reporting failure (Выйти из задания, просигнализировав об ошибке) — это значение по умолчанию предлагается выбирать при возникновении ошибки в ходе выполнения этапа.

При помощи этих возможностей на практике вы можете создавать сложные алгоритмы выполнения заданий. Для очень сложных алгоритмов рекомендуется использовать возможности скриптовых языков программирования в этапах ActiveX Script или языка SQL в этапах Transact-SQL Script.

Отметим еще один момент. Определенная вами последовательность выполнения этапов будет работать без каких-либо проблем только в заданиях, которые запускаются на выполнение по расписанию. Если вы запускаете задание с несколькими этапами на выполнение вручную, то вне зависимости от определенной вами последовательности для выбора первого этапа будет открываться окно, аналогичное представленному на рис. 8.2. Избежать его появления обычными средствами нельзя. Можно изменить задание, использовав в нем один этап типа ActiveX Script для всех действий, а можно запустить задание средствами SQL-DMO или SMO и указать программными средствами первый этап для выполнения в задании.

Рис. 8.2. Экран выбора первого этапа при запуске задания

q      Retry attempts (Попытки повтора) — сколько раз SQL Server Agent будет пытаться повторить выполнение данного этапа, если его не удалось выполнить сразу;

q      Retry intervals (Интервал повтора) — какая пауза будет сделана SQL Server Agent между попытками повторного выполнения (в минутах);

q      Output file (Файл вывода) — текстовый файл, в который будет записываться то, что возвращают команды, определенные для этапа. Этот параметр можно использовать для этапов Transact-SQL Script и CmdExec, но не для ActiveX Script (в этапах этого типа такую запись несложно организовать программно, например, при помощи объекта TextStream объектной библиотеки Scripting Runtime, имеющейся на любом компьютере).

В принципе, этот параметр можно использовать для простого экспорта данных по расписанию (например, для экспорта результатов выполнения запросов Transact-SQL). Однако для этой цели лучше использовать пакеты SSIS (DTS) — это программное средство специально предназначено для экспорта/импорта данных, и функциональных возможностей в нем значительно больше;

q      Append output to existing file (Дописать результат к существующему файлу) — обычно этот параметр используется в тех случаях, когда вы хотите накапливать результаты выполнений этапов в каком-то файле;

q      Log to table (Запротоколировать в таблицу) — параметр позволяет записать протокол выполнения этапа (только протокол, без результатов, возвращаемых, например, командой Transact-SQL) в специальную таблицу sysjobstepslogs в базе данных msdb. Кнопка View (Просмотр) справа от этого флажка позволяет просмотреть не эту таблицу (как можно было бы подумать), а текстовый файл, который вы определили ранее при помощи параметра Output file. А кнопка View рядом с именем текстового файла в SQL Server 2005 вообще недоступна (она работает только при подключении к SQL Server 2000);

q      Append output to existing entry in table (Добавлять вывод к существующим записям в таблице) — если этот флажок установлен, то при каждом запуске задания в таблицу sysjobstepslogs будут добавляться новые строки. Если он снят, то при запуске задания будут удаляться все существовавшие до этого записи;

q      Include step output in history (Включать вывод этапа в историю) — если этот флажок установлен, то вывод этапа (например, результат выполнения команд Transact-SQL) будет дописываться в таблицы истории выполнения заданий. С этим параметром нужно быть очень осторожным, потому что размер этого вывода может быть очень большим. В результате чего размер базы данных msdb может существенно возрасти.

После того как вы определили нужные этапы задания, можно просмотреть их на вкладке Steps окна свойств задания. Обратите внимание, что вы можете менять этапы местами при помощи стрелок в нижней части экрана, а также определить этап, который будет запускаться первым (при запуске по расписанию).

Обычно следующее, что нужно сделать при создании задания, — подумать, нужно ли вам запускать это задание по расписанию. Если да, то нужно настроить расписание на вкладке Schedules (Расписания) свойств задания. Сама настройка расписания вряд ли требует каких-либо комментариев. Отметим только следующие моменты:

q      в SQL Server 2005 предусмотрено четыре типа расписания (тип выбирается при помощи списка Schedule Type (Тип расписания) в окне свойств расписания):

·                Recurring — повторяющееся действие, которое будет выполняться, например, каждый день, или каждую неделю, или каждый месяц;

·                One time — действие будет выполнено только один раз;

·                Start automatically when SQL Server Agent starts — задание будет запускаться автоматически каждый раз при запуске SQL Server Agent;

·                Start whenever the CPU become idle — задание будет запускаться во время простоя центрального процессора. Состояние простоя определяется на вкладке Advanced свойств SQL Server Agent;

q      чтобы задание сработало в соответствии с настроенным расписанием, необходимо, чтобы служба SQL Server Agent находилась в рабочем состоянии. Проверьте, настроен для нее режим автозапуска;

q      с расписаниями можно работать отдельно от заданий. Фактически, это отдельный набор объектов. Чтобы открыть список всех имеющихся расписаний (с возможностью создания новых расписаний, изменения существующих и т. п.), можно воспользоваться командой Manage Schedules (Управлять расписаниями) контекстного меню для контейнера SQL Server Agent | Jobs;

q      если у вас уже есть подходящее расписание, но определенное для другого задания, создавать его заново не нужно. Достаточно воспользоваться кнопкой Pick (Выбрать) на вкладке Schedules и выбрать существующее расписание. Однако необходимо учитывать, что у расписания и у задания должен быть один и тот же владелец, поэтому таким способом можно выбрать только те расписания, владельцы которых совпадают с владельцем задания. Для выбора расписания достаточно выбрать в открывшемся окне Pick Schedule (Выбрать расписание) нужную строчку и нажать OK;

q      для одного задания можно настроить несколько расписаний. Во многих случаях это может быть очень удобно;

q      если вам нужно, чтобы на какое-то время расписание перестало действовать (например, во время новогодних праздников проводить резервное копирование базы данных каждый день нет необходимости), то проще всего это расписание отключить. Для этого нужно открыть его свойства и снять флажок Enabled.

Возможен другой вариант автоматического запуска задания — не по расписанию, а в ответ на какое-то событие, которое произошло на SQL Server. Например, можно настроить автоматическое выполнение резервного копирования в случае, если место в журнале транзакций закончилось (или его осталось слишком мало). Для отслеживания событий средствами SQL Server Agent применяются предупреждения (alerts). Подробно про работу с предупреждениями будет рассказываться в разд. 8.1.7. Здесь только отметим, что настроить предупреждение, при срабатывании которого будет автоматически запущено ваше задание, можно на вкладке Alerts (Предупреждения) свойств задания.

Кроме того, задания можно запускать и без всякого расписания — вручную. Проще всего это сделать с помощью команды Start Job (Запустить задание) контекстного меню задания в Management Studio. Другой вариант — воспользоваться хранимой процедурой sp_start_job.

Часто бывает необходимо сделать так, чтобы задание по завершении само отчиталось о своем выполнении. Например, если у вас ночью проводится резервное копирование многих баз данных на нескольких серверах, то вы можете настроить соответствующие задания так, чтобы по окончании резервного копирования каждой базы данных отчет о нем отправлялся на почтовый ящик администратора. Просмотреть почтовые сообщения в почтовом ящике обычно проще, чем смотреть логи резервного копирования на всех серверах.

Настроить параметры "отчета" задания о своем завершении можно при помощи вкладки Notifications (Уведомления) свойств задания. На этой вкладке вы можете настроить следующие параметры:

q      E-mail, page и net send — эти параметры позволяют выбрать объекты операторов (про эти объекты будет рассказано в разд. 8.1.8) для отправки предупреждений о выполнении задания соответственно по электронной почте, на пейджер и по сети (средствами службы Messenger). В вашем распоряжении три варианта, когда будет отправляться сообщение:

·                When the job fails — отправлять предупреждение только тогда, когда при выполнении задания возникла ошибка. Этот вариант выбирается по умолчанию;

·                When the job succeeds  предупреждение будет отправляться только при успешном выполнении задания;

·                When the job completes  предупреждение будет отправляться в любом случае;

q      Write to the Windows Application event log (Записывать информацию о выполнении задания в журнал событий приложений Windows) — такое решение можно использовать, например, если журналы событий Windows с разных серверов автоматически переносятся в базу данных или, например, в вашей сети работает приложение, которое автоматически отслеживает появление определенных записей в журналах событий Windows и предпринимает для них какие-либо действия (например, GFI SELM или EventTracker);

q      Automatically delete job (Автоматически удалять задание) — при выборе этого варианта задание после выполнения само себя удалит. Обычно такое решение используется для заданий, которые выполняют разовые операции, например, создание базы данных-копии, в которую будут передаваться данные средствами доставки журналов или репликации.

На вкладке Targets (Назначения) свойств задания вы можете определить, на каких именно серверах будет выполняться это задание. Эта возможность доступна только для заданий на серверах, на которых настроен режим мультисерверного выполнения. Подробно про настройку этого режима говорится в разд. 8.1.6.

 

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

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


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

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