В лекции 30 мы рассмотрели некоторые из параметров автоматического конфигурирования и параметров баз данных, входящих в Microsoft SQL Server 2000 и помогающих снизить объем работы DBA по настройке баз данных. В этой лекции вы узнаете, как использовать некоторые дополнительные средства, предоставляемые в SQL Server, для автоматизации других административных задач с помощью службы SQLServerAgent. Служба SQLServerAgent позволяет автоматически выполнять определенные периодические задачи с базой данных и оповещать DBA или другое указанное лицо о том, что на сервере возникла какая-либо проблема или событие. Использование этих возможностей позволяет DBA обходиться без ручного и непрерывного мониторинга системы баз данных, чтобы определять, когда должны выполняться определенные задачи, что позволяет выделить время для более сложных вопросов по базам данных, таких как построение и настройка индексов, оптимизация запросов или планирование будущего роста.
Для автоматизации административных задач используются три основных средства: задания (jobs), оповещения (alerts) и операторы (operators). В этой лекции вы узнаете о службе SQLServerAgent и о том, как использовать эту службу для создания и использования заданий, оповещений и операторов. Вы также узнаете о журнале ошибок SQLServerAgent, который можете использовать для слежения за работой, выполняемой SQLServerAgent.
Служба SQLServerAgent
Агент SQL Server Agent запускается отдельно от SQL Server, как служба с именем SQLServerAgent. Эта служба включена в состав SQL Server 2000, но она должна запускаться отдельно – вручную или автоматически. (Об инструкциях по запуску SQLServerAgent см. лекцию 8.) После запуска этой службы вы можете переходить к определению любых нужных вам заданий, оповещений и операторов.
Примечание.Служба SQLServerAgent называлась SQL Executive в Microsoft SQL Server 6.5 и более ранних версиях. Она также используется для репликации. (См. лекции 26, 27 и 28.)
Задания
Задания – это административные задачи, которые определяются один раз и могут выполняться многократно. Вы можете запускать задание вручную, а также планировать запуск задания системой SQL Server в определенное время, в соответствии с регулярным расписанием или при возникновении оповещения. (Об оповещениях описаны далее в разделе "Оповещения".) Задания могут состоять из операторов Transact-SQL (T-SQL), команд Microsoft Windows NT или Microsoft Windows 2000, исполняемых программ или сценариев Microsoft ActiveX. Задания также автоматически создаются для вас, когда вы используете репликацию или создаете план обслуживания базы данных. Задание может состоять из одного или нескольких шагов, и каждый шаг может быть вызовом более сложного набора шагов, например обращением к хранимой процедуре. SQL Server автоматически следит за результатом выполнения заданий (успешное или неуспешное завершение); вы можете задавать оповещения, которые будут отправляться в каждом случае.
Задания могут выполняться локально на сервере, а в случае нескольких серверов в сети вы можете назначать один из серверов как главный сервер, а остальные серверы – как серверы-получатели. На главном сервере хранятся определения заданий для всех серверов, и этот сервер действует как центр обмена информацией для координирования работы всех заданий. Каждый сервер-получатель периодически подсоединяется к главному серверу, обновляет список своих заданий, если какие-либо задания изменились, загружает любые новые задания с главного сервера и затем отсоединяется для выполнения этих заданий. Когда сервер-получатель завершает какое-либо задание, он снова подсоединяется к главному серверу и сообщает о статусе его завершения.
Рассмотрим ситуацию, в которой вам может потребоваться создать задание. Предположим, что у вас имеется таблица базы данных, в которой ведется запись по каждой выполненной в банковской среде транзакции, такой как вклад денег на счет, снятие денег со счета и перевод (трансферт) денег. Каждая запись содержит колонку временной метки (timestamp),где указывается время выполнения транзакции. Эта таблица непрерывно растет, и ее нужно периодически сокращать. Для удаления строк из этой таблицы вы можете написать небольшую хранимую процедуру, в которой используется оператор DELETE для удаления строк, которые хранятся больше двух месяцев (в предположении, что банк должен хранить записи только два месяца). Затем вы можете создать задание для выполнения этой хранимой процедуры раз в неделю, например в ночь на воскресенье. Тем самым вы можете воспрепятствовать бесконечному росту данной таблицы. Это позволяет экономить пространство на диске и, кроме того, обычно повышает производительность. При меньшем количестве данных, среди которых выполняется по запросу, SQL Server может быстрее выполнить этот запрос. А теперь перейдем к подробностям создания заданий.
Примечание.Для работы ваших заданий должна быть запущена служба SQLServerAgent.
Создание задания
Чтобы определить задание, вы можете использовать Enterprise Manager, сценарии
T-SQL, мастер создания заданий Create Job Wizard или SQL-Distributed Management Objects (SQL-DMO). Поскольку метод SQL-DMO связан с программированием, он выходит за рамки материала этой книги. В этом разделе вы узнаете о трех других методах создания заданий.
Дополнительная информация. Для получения информации по созданию заданий найдите "jobs" (задания) в индексе Books Online и выберите тему "Creating SQL Server Agent Jobs (SQL-DMO)" (создание заданий SQL Server Agent [SQL-DMO]) в диалоговом окне Topics Found (Найденные темы).
Использование Enterprise Manager
Сначала создадим задание с помощью Enterprise Manager. Один из наиболее распространенных случаев применения заданий – это резервное копирование баз данных. (Для этого можно также использовать мастер плана обслуживания Maintenance Plan Wizard, см. лекцию 30.) В следующем примере создается задание на резервное копирование базы данных MyDB. В нем запланированы запуск резервного копирования каждый вечер в 11 P.M. (23:00) и запись результата завершения этого задания (успешное или неуспешное) в журнал событий приложения Windows NT или Windows 2000 и в выходной файл. Для создания этого задания, которое мы назовем MyDB_backup_job, выполните следующие шаги.
В левой панели Enterprise Manager раскройте папку сервера, раскройте папку Management (Управление) и затем раскройте папку SQL Server Agent. Щелкните правой кнопкой мыши на Jobs (Задания) и выберите из контекстного меню пункт New Job (Создать задание). Появится окно New Job Properties (Свойства нового задания) (рис 31.1(рис 31.1) Вкладка General окна New Job Properties (Свойства нового задания)
Во вкладке General задайте следующие параметры:Name (Имя). Введите в текстовом поле Name имя задания (в данном случае – MyDB_backup_job ). Имя задания может содержать до 128 символов. Каждое задание на сервере должно иметь уникальное имя. Постарайтесь задать описательное имя.
Enabled (Активизировать). Установленный флажок Enabled указывает, что задание должно быть активизировано. Возможно, вы захотите сначала деактивизировать задание, чтобы проверить его вручную и убедиться, что оно правильно работает. Проверив задание и убедившись в правильности его работы, используйте этот флажок для активизации задания, чтобы оно автоматически запускалось в соответствии с расписанием.
Category (Категория).Выберите категорию для задания; в данном случае мы используем принятую по умолчанию категорию Uncategorized (Local) (Без категории [Локально]). Вы можете выбирать из списка категорий, которые создаются при инсталляции SQL Server, или можете создавать свои собственные категории. (О создании новой категории см. в подразделе "Создание новой категории" далее.) В список инсталлированных категорий входят Uncategorized (Local), Database Maintenance (Обслуживание базы данных), Full Text (Полнотекстовый поиск), Web Assistant (Web-помощник) и 10 категорий для репликации. Категории используются для группирования родственных заданий. Например, вы можете группировать в одной категории все задания, которые используются для выполнения задач обслуживания базы данных, или группировать задания по отделам, таким как отделы бухгалтерского учета, продаж и маркетинга. Категории позволяют вам следить за несколькими заданиями: вам не нужно просматривать весь список заданий, когда вас интересует только определенная часть заданий.
Owner (Владелец). Владелец – это пользователь, который создает задание, или пользователь, для которого создается задание. Только роли sysadmin позволяют изменять владельца задания или изменять задание, владельцем которого является другой пользователь. (О роли SQL Server см. лекцию 34). Все роли sysadmin, а также владелец задания могут изменять определение задания, а также запускать и останавливать задание. В раскрывающемся списке Owner всегда выбирайте пользователя, который будет выполнять задание. В данном примере используется пользователь, который создает задание, поэтому соответствующий пользователь выбран автоматически, и вы можете оставить этот выбор без изменений.
Description (Описание).В текстовом поле Description вы указываете, какие задачи выполняет этот задание, и цель этого задания. Вам следует всегда вводить описание. Это позволяет другим пользователям быстро определять, для чего предназначено задание. Описание может содержать до 512 символов.
Target local server (На локальном сервере). Если щелкнуть на этой кнопке выбора, то задание будет выполняться только на локальном сервере. Если к данному серверу подсоединены удаленные серверы, то будет доступна кнопка выбора Target multiple servers (На нескольких серверах). Щелкните на этой кнопке выбора, чтобы указать удаленные серверы, на которых также будет запускаться это задание.
На рис 31.2(рис 31.2) Заполненная вкладка General
Щелкните на вкладке Steps (Шаги) и щелкните на New (Создать), чтобы появилось диалоговое окно New Job Step (Новый шаг задания) (рис. 31.3). Шаги задания – это команды или операторы, которые определяют задачи данного задания. Каждое задание должно содержать хотя бы один шаг и может содержать несколько шагов. Во вкладке General диалогового окна New Job Step введите следующую информацию:В текстовом поле Step name (Имя шага) введите имя данного шага (в данном случае введите MyDB_backup ).
В раскрывающемся списке Type (Тип) выберите тип шага. В данном примере выберите Transact-SQL Script (TSQL) (Сценарий T-SQL), поскольку для выполнения этого задания мы будем использовать команды T-SQL. Среди других вариантов выбора – ActiveX Script (Сценарий ActiveX), Operating System Command (Команда операционной системы), Replication Distributor (Дистрибьютор репликации), Replication Transaction-Log Reader (Репликация, чтение журнала транзакций), Replication Merge (Репликация слиянием), QueueReader (Репликация, чтение данных из очереди) и Replication Snapshot (Репликация моментального снимка).
(рис 31.3) Заполненная вкладка General диалогового окна New Job Step (Новый шаг задания)
В раскрывающемся списке Database (База данных) выберите имя базы данных, с которой будет работать данное задание. Для данного примера выберите базу данных MyDB.
В текстовом поле Command (Команда) введите команды, которые хотите включить в данный шаг. Для данного примера это команды T-SQL для резервного копирования базы данных MyDB устройство резервного копирования с именем MyDB_backup1. Это устройство должно быть создано заранее. (О создании устройств резервного копирования см. лекцию 32.} Кроме того, наш случай – это простой пример, в котором резервная копия базы данных будет записываться в один и тот же файл каждую ночь. На практике для выполнения резервного копирования вам следует использовать план обслуживания базы данных (см. лекцию 30), поскольку это позволит вам создавать новое устройство резервного копирования на каждый день. Вы можете также щелкнуть на кнопке Open (Открыть), чтобы открыть файл, если у вас есть подготовленный сценарий, который вы хотите ввести как задание.
Щелкните на кнопке Parse (Синтаксический разбор), чтобы проверить синтаксис ваших шагов T-SQL, и затем щелкните на вкладке Advanced (Дополнительно) и задайте параметры (рис 31.4(рис 31.4) Заполненная вкладка Advanced (Дополнительно) диалогового окна New Job Step
Щелкните на кнопке Apply (Применить) и затем щелкните на кнопке OK, чтобы вернуться во вкладку Steps окна New Job Properties, где вы можете при необходимости определить другие шаги задания. Щелкните на кнопке New, чтобы добавить новый шаг вслед за существующим шагом. Чтобы вставить новый шаг перед существующим шагом, выделите этот существующий шаг и затем щелкните на кнопке Insert (Вставить), чтобы появилось окно New Job Step. Введите информацию для шага, который вы хотите вставить. Для удаления шага выделите этот шаг и щелкните на кнопке Delete (Удалить); для редактирования шага выделите его и щелкните на кнопке Edit (Редактирование). Вы можете также переместить шаг в списке, выделив его и щелкая на кнопке "стрелка вверх" или "стрелка вниз" справа от метки Move Step (Переместить шаг). В раскрывающемся списке Start Step (Начальный шаг) вы можете выбрать шаг, который будет выполняться первым в данном задании. Рядом с идентификационным номером шага, который будет выполняться первым, появится зеленый флаг. Щелкните на кнопке Apply, чтобы включить ваши шаги в задание. Если логика последовательности выполняемых шагов приводит к тому, что не будет выполняться какой-либо шаг, то после щелчка на кнопке Apply SQL Server выведет предупреждающее сообщение и позволит вам изменить логику последовательности.
Чтобы создать расписание для этого задания, щелкните на вкладке Schedules (Расписания). Чтобы найти текущее время на каком-либо сервере, выберите имя этого сервера в раскрывающемся списке NOTE: The Current Date/Time On Target Server (Текущие дата/время на целевом сервере). Щелкните на кнопке New Schedule (Создать расписание), чтобы появилось диалоговое окно New Job Schedule (Новое расписание задания) (рис 31.5(рис 31.5) Диалоговое окно New Job Schedule (Новое расписание задания)
Поскольку мы выбрали расписание повторяющегося типа, то вы должны задать моменты времени и дни, когда должно запускаться это задание. Для этого щелкните на кнопке Change (Изменить), чтобы появилось диалоговое окно Edit Recurring Job Schedule (Редактировать расписание повторяющихся заданий). Введите новые моменты времени и дни, затем щелкните на кнопке OK, чтобы вернуться в диалоговое окно New Job Schedule. (Напомним, что нам нужно задать ежедневное резервное копирование, которое будет запускаться в 11 P.M.)
Щелкните на кнопке OK в диалоговом окне New Job Schedule, чтобы согласиться с расписанием и вернуться в окно New Job Properties. Чтобы удалить какое-либо расписание, выделите имя этого расписания и щелкните на кнопке Delete. Чтобы отредактировать какое-либо расписание, выделите имя этого расписания и щелкните на кнопке Edit.Примечание. Вы можете также создать новое оповещение для этого задания. Оповещения подробно рассматриваются далее.
Щелкните на вкладке Notifications (Уведомления) (рис 31.6(рис 31.6) Вкладка Notifications (Уведомления) окна New Job Properties
Закончив формирование параметров, щелкните на кнопке Apply, чтобы создать ваше задание, и затем щелкните на кнопке OK, чтобы выйти из окна New Job Properties и вернуться в Enterprise Manager.
Щелкните на строке Jobs в левой панели Enterprise Manager. Вы увидите задание MyDB_backup_job, включенное в список заданий в правой панели.
Создание новой категории. Чтобы создать новую категорию, раскройте сервер в левой панели Enterprise Manager, раскройте папку Management (Управление), щелкните правой кнопкой мыши на строке Jobs, укажите в контекстном меню пункт All Tasks (Все задачи) и затем выберите команду Manage Job Categories (Управление категориями заданий). Появится диалоговое окно Job Categories (Категории заданий) (рис. 31.7), где вы можете добавлять новые категории, просматривать существующие категории и задания, которые в них входят, и удалять категории.
(рис 31.7) Диалоговое окно Job Categories (Категории заданий)
Использование T-SQL
Команды T-SQL, используемые для создания задания, добавления шагов к заданию и создания расписания для задания, – это системные хранимые процедуры sp_add_job, sp_add_jobstep и sp_add_jobschedule. Эти хранимые процедуры имеют много необязательных параметров, как это показано в их синтаксисе, представленном в этом разделе. SQL Server присваивает каждому неуказанному параметру значение по умолчанию. Enterprise Manager намного удобнее для создания заданий, поскольку его графический пользовательский интерфейс позволяет вам увидеть все параметры для задания, чтобы вы ничего не забыли. Используя T-SQL, вы должны задавать значения для всех необязательных параметров или быть уверенным в том, что принятые по умолчанию значения всех пропущенных вами параметров подходят для вашего задания. Вместо запуска этих хранимых процедур вручную вам следует использовать Enterprise Manager. Вы можете затем генерировать сценарии T-SQL, которые использовал Enterprise Manager для создания вашего задания; для этого щелкните правой кнопкой мыши на имени этого задания, укажите в контекстном меню All Tasks и выберите команду Generate SQL Script (Генерировать SQL-сценарий). Этот метод поможет вам повторно создать задание с помощью сценария, если это когда-нибудь потребуется.
Для запуска этих хранимых процедур вы должны использовать базу данных msdb, поскольку они хранятся в этой базе данных. Рассмотрим параметры, которые указываются в этих хранимых процедурах, – на тот случай, если вы все же захотите использовать их. Для всех хранимых процедур, описанных в этом разделе, используется один общий синтаксис. Хранимая процедура sp_add_job имеет следующий синтаксис:
sp_add_job [@job_name =] 'job_name'
[,[@enabled =] enabled]
[,[@description =] 'description']
[,[@start_step_id =] step_id]
[,[@category_name =] 'category']
[,[@category_id =] category_id]
[,[@owner_login_name =] 'login']
[,[@notify_level_eventlog =] eventlog_level]
[,[@notify_level_email =] email_level]
[,[@notify_level_netsend =] netsend_level]
[,[@notify_level_page =] page_level]
[,[@notify_email_operator_name =] 'email_name']
[,[@notify_netsend_operator_name =] 'netsend_name']
[,[@notify_page_operator_name =] 'page_name']
[,[@delete_level =] delete_level]
[,[@originating_server =] 'server_name'
[,[@job_id =] job_id OUTPUT]
Процедура sp_add_jobstep имеет следующий синтаксис:
sp_add_jobstep [@job_id =] job_id | [@job_name =] 'job_name']
[,[@step_id =] step_id]
{,[@step_name =] 'step_name'}
[,[@subsystem =] 'subsystem']
[,[@command =] 'command']
[,[@additional_parameters =] 'parameters']
[,[@cmdexec_success_code =] code]
[,[@on_success_action =] success_action]
[,[@on_success_step_id =] success_step_id]
[,[@on_fail_action =] fail_action]
[,[@on_fail_step_id =] fail_step_id]
[,[@server =] 'server']
[,[@database_name =] 'database']
[,[@database_user_name =] 'user']
[,[@retry_attempts =] retry_attempts]
[,[@retry_interval =] retry_interval]
[,[@os_run_priority =] run_priority]
[,[@output_file_name =] 'file_name']
[,[@flags =] flags]
Процедура sp_add_jobschedule имеет следующий синтаксис:
sp_add_jobschedule [@job_id =] job_id, | [@job_name =] 'job_name',
[@name =] 'name'
[,[@enabled =] enabled]
[,[@freq_type =] freq_type]
[,[@freq_interval =] freq_interval]
[,[@freq_subday_type =] freq_subday_type]
[,[@freq_subday_interval =] freq_subday_interval]
[,[@freq_relative_interval =] freq_relative_interval]
[,[@freq_recurrence_factor =] freq_recurrence_factor]
[,[@active_start_date =] active_start_date]
[,[@active_end_date =] active_end_date]
[,[@active_start_time =] active_start_time]
[,[@active_end_time =] active_end_time]
Дополнительная информация.Чтобы получить описание каждого параметра и его значения по умолчанию, найдите имя соответствующей хранимой процедуры в индексе Books Online.
Примечание. Описанные здесь хранимые процедуры, как и другие хранимые процедуры, связанные с созданием и управлением для заданий, операторов, уведомлений и оповещений, хранятся в базе данных msdb. Для запуска этих процедур у вас должна использоваться эта база данных.
Использование мастера Create Job Wizard
В состав Enterprise Manager включен мастер, который помогает вам пройти через процесс формирования заданий в пошаговом режиме. Правда, этот мастер ограничен в том, что вы можете создать только один шаг задания. Тем не менее он позволяет вам создавать расписание для задания и указывать операторов, которые будут получать уведомление о статусе задания. Создав такое задание, вы можете затем добавлять к нему новые шаги, модифицируя задание с помощью Enterprise Manager.
Чтобы использовать мастер Create Job Wizard, выполните следующие шаги.
В Enterprise Manager выберите из меню Tools пункт Wizards (Мастера) в появившемся диалоговом окне Select Wizard (Выбор мастера) раскройте папку Management и выберите Create Job Wizard, чтобы появилось начальное окно мастера Create Job Wizard (рис 31.8(рис 31.8) Начальное окно мастера Create Job Wizard
Щелкните на кнопке Next, чтобы появилось окно Select job command type (Выбор типа команды для задания) (рис 31.9(рис 31.9) Окно Select job command type (Выбор типа команды для задания).
Щелкните на кнопке Next, чтобы появилось окно Enter Transact-SQL Statement (Ввод оператора T-SQL) (рис 31.10(рис 31.10) Окно Enter Transact-SQL Statement (Ввод оператора T-SQL)
Щелкните на кнопке Next, чтобы появилось окно Specify job schedule (Задать расписание задания) (рис 31.11Вариант Now (Сейчас) указывает, что задание будет запущено, как только мастер завершит свою работу. Назначение других кнопок выбора описывается их названием. Для данного примера щелкните на кнопке выбора On a recurring basis (На повторяющейся основе) и затем щелкните на кнопке Schedule, чтобы задать расписание. Появится диалоговое окно Edit Recurring Job Schedule (рис 31.12(рис 31.12) Окно Specify job schedule (Задать расписание задания)(рис 31.11) Диалоговое окно Edit Recurring Job Schedule
Щелкните на кнопке Next, чтобы появилось окно Job Notifications (Уведомления для задания) (рис 31.13(рис 31.13) Окно Job Notifications (Уведомления для задания)В раскрывающихся списках Net send и/или E-mail выберите оператора, который будет получать уведомление о статусе завершения этого задания. У вас уже должны быть определены операторы, чтобы они появились в раскрывающемся списке. На рис. 31.13 не определено ни одного оператора (No operators). Если вы хотите уведомлять оператора, который еще не определен, завершите работу мастера и затем добавьте этого оператора, как это описано в разделе "Операторы" далее. Вы можете затем модифицировать свойства задания, включив уведомление для этого оператора. Вы можете также прекратить работу мастера, создать оператора и затем снова выполнить запуск мастера.
Щелкните на кнопке Next, чтобы появилось окно Completing the Create Job Wizard (Завершение работы мастера) (рис. 31.14). Здесь вы можете назначить имя задания, заменив заданное по умолчанию имя в текстовом поле Job Name (Имя задания); в данном примере ваше задание названо (рис 31.14) Окно Completing the Create Job WizardПосле завершения работы мастера Create Job Wizard это новое задание появится в папке Jobs окна Enterprise Manager.
Управление заданием
Вы можете управлять вашими заданиями и редактировать их в Enterprise Manager или с помощью T-SQL. И здесь для вас будет проще использовать Enterprise Manager, поскольку вам не нужно заботиться о синтаксисе и значениях по умолчанию, связанных с хранимыми процедурами T-SQL, поскольку графический интерфейс Enterprise Manager помогает вам пройти через всю установку свойств задания.
Использование Enterprise Manager
С помощью Enterprise Manager вы можете вручную запускать, останавливать, деактивизировать, активизировать и редактировать задание, а также создавать для него сценарии T-SQL. Ниже приводятся инструкции для каждой из этих задач.
Для запуска задания щелкните правой кнопкой мыши на имени этого задания в правой панели Enterprise Manager и выберите из контекстного меню пункт Start Job (Запустить задание).
Для остановки текущего выполняемого задания и отмены всех повторных попыток, сконфигурированных для этого задания, щелкните правой кнопкой мыши на имени задания и выберите из контекстного меню пункт Stop Job (Остановить задание).
Чтобы деактивизировать задание для его последующего тестирования, не допуская его запуска в запланированное время или по какой-либо другой причине, щелкните правой кнопкой мыши на имени этого задания и выберите из контекстного меню пункт Disable Job (Деактивизировать задание). Чтобы снова активизировать задание, выберите пункт Enable Job.
Чтобы редактировать задание, расписание или любое другое свойство задания, щелкните правой кнопкой мыши на имени этого задания и выберите из контекстного меню пункт Properties, чтобы появилось окно свойств задания Properties, которое содержит те же четыре вкладки, которые вы использовали для создания этого задания. Внесите свои изменения, щелкните на кнопке Apply и затем щелкните на кнопке OK.
Чтобы создать сценарий T-SQL для вашего задания на тот случай, если вы захотите снова создать этот задание без повторного ввода операторов T-SQL, щелкните правой кнопкой мыши на имени этого задания, укажите в контекстном меню пункт All Tasks и затем выберите команду Generate SQL Script, чтобы появилось диалоговое окно Generate SQL Script. Введите имя файла, выберите формат файла (Unicode, ANSI или текст OEM) и щелкните на кнопке OK.
Использование T-SQL
Вы можете также запускать, останавливать, активизировать, деактивизировать и редактировать задание с помощью следующих хранимых процедур T-SQL. Не забудьте, что при выполнении этих процедур у вас должна использоваться база данных msdb.
sp_start_job. Сразу запускает указанное задание. В этой процедуре нужно указывать имя задания или идентификационный номер задания.
sp_stop_job. Останавливает текущее выполняемое задание. В этой процедуре нужно указывать имя задания, идентификационный номер задания или имя главного сервера.
sp_update_job. Позволяет вам активизировать, деактивизировать и изменять свойства задания. В этой процедуре нужно указывать имя задания или идентификационный номер задания.
Дополнительная информация. Для просмотра синтаксиса этих процедур и параметров, которые используются при их вызове, найдите нужную хранимую процедуру в индексе Books Online.
Просмотр журнала выполнения задания
SQL Server поддерживает журнал (историю) с информацией о выполнении задания в таблице sysjobhistory системной базы данных msdb. Вы можете просмотреть информацию журнала выполнения задания с помощью Enterprise Manager или T-SQL.
Использование Enterprise Manager
Для просмотра журнала задания с помощью Enterprise Manager выполните следующие шаги.
Щелкните правой кнопкой мыши на имени задания в правой панели Enterprise Manager и выберите из контекстного меню пункт View Job History (Просмотр журнала задания), чтобы появилось диалоговое окно Job History (рис 31.15(рис 31.15) Диалоговое окно Job History (Журнал заданий)
Для просмотра дополнительных подробностей о статусе выполнения задания установите флажок Show step details (Показать подробности по шагам) в верхнем правом углу этого диалогового окна. На рис 31.16(рис 31.16) Подробности по шагам, представленные в диалоговом окне Job History
Для удаления всех сообщений щелкните на кнопке Clear All (Очистить все). Для обновления экрана, чтобы можно было увидеть статус любых новых заданий, которые были запущены после того, как вы открыли диалоговое окно Job History, щелкните на кнопке Refresh (Обновить). Чтобы закрыть диалоговое окно Job History, щелкните на кнопке Close (Закрыть).
Использование T-SQL
Для просмотра журнала с информацией о выполнении запланированных заданий с помощью T-SQL запустите хранимую процедуру sp_help_jobhistory в базе данных msdb. Эта процедура имеет следующий синтаксис:
sp_help_jobhistory [[@job_id =] job_id]
[, [@job_name =] 'job_name']
[, [@step_id =] step_id]
[, [@sql_message_id =] sql_message_id]
[, [@sql_severity =] sql_severity]
[, [@start_run_date =] start_run_date]
[, [@end_run_date =] end_run_date]
[, [@start_run_time =] start_run_time]
[, [@end_run_time =] end_run_time]
[, [@minimum_run_duration =] minimum_run_duration]
[, [@run_status =] run_status]
[, [@minimum_retries =] minimum_retries]
[, [@oldest_first =] oldest_first]
[, [@server =] 'server']
[, [@mode =] 'mode']
Если запустить эту процедуру без параметров или без параметра job id (Идентификатор задания) или job name (Имя задания), то будет возвращена информация обо всех запланированных заданиях. Параметр mode (режим) указывает, нужно ли возвращать всю информацию журнала задания ( FULL ) или только сводку ( SUMMARY ). Значение по умолчанию – SUMMARY.
Дополнительная информация. Для получения подробной информации обо всех других параметрах этой хранимой процедуры найдите "sp_help_jobhistory" в индексе Books Online.
Оповещения
Оповещение – это действие, которое возникает на сервере в ответ на событие или состояние производительности. Оповещения могут реализоваться как уведомления операторам, могут инициировать запуск указанных заданий и могут перенаправлять события другому серверу. Событие – это ошибка или сообщение, которые записываются в журнал событий приложений Windows NT или Windows 2000 (вы можете просматривать этот журнал с помощью утилиты Event Viewer, поставляемой вместе с Windows NT или Windows 2000). Состояние производительности – это характеристика работы системы, доступная для мониторинга с помощью Performance Monitor (Windows NT) или System Monitor (Windows 2000), такая как процент использования ЦП или количество блокировок, используемых SQL Server. В этой лекции мы будем рассматривать System Monitor в Windows 2000, хотя Performance Monitor в Windows NT действует почти так же.
При возникновении какого-либо события служба SQLServerAgent сравнивает это событие со списком определенных вами оповещений, и если для этого события существует оповещение, то происходит запуск этого оповещения.
Запуск оповещения для определенного состояния производительности происходит в том случае, если указанный объект SQL Server в System Monitor достигает определенного порогового значения производительности, например, счетчик User Connections (Количество пользовательских соединений) внутри объекта General Statistics (Общая статистика) в System Monitor. Например, вы можете указать запуск оповещения, если значение этого счетчика достигнет 50. (О работе System Monitor описывается см. лекцию 36.)
Примечание. Для запуска оповещений требуется, чтобы работала служба SQLServerAgent.
Протоколирование сообщений в журнале
событий
Прежде чем перейти к созданию оповещения для какого-либо события, мы рассмотрим типы событий, которые приводят к передаче сообщений в журнал событий приложений Windows NT или Windows 2000; только эти события можно использовать для создания оповещений. События (или ошибки) с уровнем серьезности (severity level) от 19 до 25 автоматически передаются в журнал событий приложений Windows NT или Windows 2000 и поэтому могут использоваться для запуска оповещений. По умолчанию события с уровнем серьезности меньше 19 не протоколируются в журнале, и поэтому эти события не могут использоваться для запуска оповещений. Чтобы эти события протоколировались в журнале, вы должны использовать sp_altermessage, оператор RAISERROR WITH LOG или xp_logevent, позволяющие изменить статус протоколирования события или сообщения. В данном разделе вы узнаете, как создавать определенное пользователем сообщение о событии и как изменять это сообщение, чтобы обеспечить его запись в журнал событий приложений.
Примечание. Если сообщение SQL Server протоколируется в журнале событий приложений Windows NT или Windows 2000, то оно также протоколируется в журнале SQL Server. Для просмотра журнала SQL Server в Enterprise Manager раскройте папку Management для вашего сервера и раскройте папку SQL Server Logs.
Создание определенного пользователем сообщения о событии
Вся информация для системных и определенных пользователем сообщений сохраняется в таблице sysmessages базы данных master. Чтобы создать определенное пользователем сообщение, используйте системную хранимую процедуру T-SQL sp_addmessage. Она имеет следующий синтаксис:
sp_addmessage [@msg_num =] msg_id,
[@severity=] severity,
[@msg_text=] 'msg_text'
[,[@lang =] 'language']
[,[@with_log=] 'with_log']
[,[@replace =] 'replace']
Определенное пользователем сообщение должно иметь значение идентификатора сообщения ( msg_id ) 50001 или больше. Параметр severity – это уровень серьезности ошибки, на который ссылается сообщение, в диапазоне от 1 до 25, причем более высокие значения означают более высокий уровень серьезности ошибки. Уровни серьезности от 19 до 25 может задавать только системный администратор. Параметр msg_text – это текст сообщения об ошибке, который появится в журнале событий приложений при возникновении данной ошибки. Параметр language указывает, на каком языке будет написано сообщение, поскольку вместе с SQL Server может быть инсталлировано несколько языков. Параметр with_log (с журналом) может иметь значение TRUE или FALSE, указывая, будет ли данное сообщение всегда протоколироваться в журнале событий приложений Windows NT или Windows 2000. Значение по умолчанию – FALSE. Оператор RAISERROR WITH LOG (описывается в следующем разделе) изменяет это значение, если оно равно FALSE. Параметр replace (заменять) указывает, что данное сообщение должно заменять существующее сообщение, имеющее тот же номер идентификатора ( msg_id ).
Владельцы роли public имеют полномочия выполнения процедуры sp_addmessage, но чтобы создать сообщение с уровнем серьезности больше 18 или задать значение TRUE для параметра with_log, вы должны быть владельцем роли sysadmin.
Рассмотрим пример использования sp_addmessage. Следующий оператор создает новое сообщение, которое будет всегда протоколироваться в журнале событий (поскольку для параметра with_log задано значение TRUE ):
sp_addmessage 50001, 16, "Customer ID is out of range.", @with_log = "TRUE"
GO
Изменение параметров протоколирования
сообщения о событии
Предположим, что существующее сообщение, или сообщение, которое вы только что создали, не позволяет протоколировать его в журнале (или вы не включили параметр with_log ), как в следующем примере:
sp_addmessage 50001, 16, "Customer ID is out of range.", @with_log = "FALSE"
GO
Если в дальнейшем вам потребуется протоколировать это сообщение в журнале, вы должны изменить его статус протоколирования. Для этого используйте процедуру sp_altermessage, чтобы всегда происходило протоколирование в журнале, как в следующем примере:
sp_altermessage 50001, WITH_LOG, "TRUE"
GO
В качестве альтернативного средства вы можете использовать оператор RAISERROR с параметром WITH LOG, чтобы возвращать данное сообщение в ваше приложение, а также в журнал событий приложений и в журнал SQL Server. Например, следующий оператор отправляет в вашу программу сообщение 50001 с уровнем серьезности 16 и значением параметра состояния (state) 1, где state – это числовое значение, которое можно использовать для отслеживания, если сообщение передается более чем в одно местоположение:
RAISERROR (50001, 16, 1) WITH LOG
GO
Дополнительная информация.Для получения более подробной информации об использовании RAISERROR найдите "RAISERROR" в индексе Books Online и выберите "Using RAISERROR" в диалоговом окне Topics Found.
Чтобы изменить статус протоколирования сообщения вы можете также использовать расширенную хранимую процедуру xp_logevent, которая находится в базе данных master. При использовании этой процедуры сообщение передается в журнал событий и в журнал SQL Server, но не в клиентское приложение. Ниже приводится пример использования этой процедуры:
USE master
GO
xp_logevent 50002, "Customer ID out of range", warning
GO
Первые два параметра являются обязательными: это идентификационный номер определенного пользователем сообщения (который, как уже говорилось, должен быть больше 50000) и текст сообщения, которое будет передаваться в эти журналы. Третий параметр (уровень серьезности) не является обязательным. Он может быть представлен одной из трех текстовых строк: informational (информационное), warning (предупреждение) или error (ошибка). Значение уровня серьезности определяет, какой тип значка появится рядом с сообщением в окне Event Viewer, чтобы вы могли легко отличать предупреждения от ошибок. Для Windows 2000 информационное сообщение снабжено синим значком "i", предупреждение – желтым значком "!" и ошибка – красным значком "X". Если уровень серьезности не задан, то по умолчанию используется значение informational.
Создание оповещения
Теперь мы готовы создать оповещение по событию и по состоянию производительности. Для создания оповещения вы можете использовать Enterprise Manager, T-SQL или SQL-DMO. И здесь мы будем рассматривать только методы использования Enterprise Manager и T-SQL, поскольку SQL-DMO выходит за рамки материала этой книги.
Использование Enterprise Manager для создания оповещения по событию
В этом примере мы создадим оповещение по системному сообщению, которое уже имеет уровень серьезности 24. Это сообщение будет протоколироваться по умолчанию в журнале событий без какого-либо вмешательства пользователя, необходимого для изменения его статуса протоколирования. Чтобы создать оповещение по событию, выполните следующие шаги.
В левой панели Enterprise Manager раскройте папку сервера, раскройте папку Management (Управление) и затем раскройте папку SQL Server Agent. Щелкните правой кнопкой мыши на Alerts (Оповещения) и выберите из контекстного меню пункт New Alert (Создать оповещение). Появится окно New Alert Properties (Свойства нового оповещения) (рис. 31.17). Во вкладке General введите имя оповещения, которое может содержать до 128 символов. Для данного примера введите (рис 31.17) Вкладка General окна New Alert Properties
В секции Event alert definition (Определение оповещения по событию) окна New Alert Properties нужно задать событие, по которому будет запускаться данное оповещение, щелкнув на кнопке выбора Error number (Номер ошибки) или Severity (Уровень серьезности) и указав затем номер ошибки или уровень серьезности. Если задан уровень серьезности, то данное оповещение будет запускаться по всем ошибкам с этим уровнем серьезности. Для данного примера щелкните на кнопке выбора Error Number и затем щелкните на кнопке обзора Browse (...), чтобы выполнить поиск номера. Появится диалоговое окно Manage SQL Server Messages (Управление сообщениями SQL Server) (рис. 31.18).
Для поиска определенной ошибки, нужно выбрать соответствующую категорию в окне списка Severity вкладки Search (Поиск) и щелкнуть на кнопке Find (Найти). Найденные ошибки будут представлены в списке вкладки Messages (Сообщения). Два флажка внизу вкладки Search можно использовать для ограничения поиска. Флажок Only include logged messages (Включать только протоколируемые в журнале сообщения) позволяет выполнять поиск только тех сообщений, которые автоматически протоколируются в журнале событий. Флажок Only include user-defined messages (Включать только определенные пользователем сообщения) ограничивает поиск только теми сообщениями, которые определены пользователями. Для нашего примера мы хотим найти все фатальные ошибки оборудования, поэтому выделите в окне списка Severity ошибку 024 – Fatal Error: Hardware Error (Фатальная ошибка: Ошибка оборудования) и затем щелкните на кнопке Find. Во вкладке Messages (рис 31.19
(рис 31.19) Вкладка Search (Поиск) диалогового окна Manage SQL Server Messages(рис 31.18) Вкладка Messages (Сообщения) диалогового окна Manage SQL Server Messages
Щелкните на кнопке OK, чтобы подтвердить выбор этого сообщения и вернуться во вкладку General окна New Alert Properties. В раскрывающемся списке Database Name (Имя базы данных) вы можете задать, что оповещение будет запускаться, только если данное событие возникло в указанной базе данных. Оставьте значение по умолчанию All Databases (Все базы данных). В текстовом поле Error message contains this text (Сообщение об ошибке содержит следующий текст) вы можете ввести строку символов (до 100 символов), которая ограничивает круг ошибок, по которым будет запускаться данное оповещение, только теми ошибками, текст которых содержит данную строку. Если оставить это поле пустым, то никакого ограничения не применяется.
Щелкните на вкладке Response (Отклик) (рис. 31.20). В этой вкладке вы можете указать действие, которое следует предпринять, если возникнет это оповещение. Установите флажок Execute job (Выполнить задание) и выберите в раскрывающемся списке имя задания, которое будет выполнено в случае этого оповещения. Щелчок на кнопке New Operator (Создать оператора) позволяет вам создать нового оператора, который будет получать уведомление. В списке Operators to notify (Операторы для уведомления) будут представлены существующие операторы. Вы можете задать, нужно ли уведомлять оператора по электронной почте (колонка E-mail), через пейджер (pager), с помощью (рис 31.20) Вкладка Response (Отклик) окна New Alert PropertiesЕсли вы указываете какого-либо оператора для уведомления по электронной почте, а также устанавливаете флажок Include alert error text in E-mail (Включить текст ошибки оповещения в электронную почту), то текст ошибки будет отправлен оператору в сообщении оповещения. Чтобы включить в сообщение электронной почты дополнительный текст, введите его в текстовом поле Additional notification message to send (Дополнительное сообщение уведомления для отправки) внизу этой вкладки. В этом поле можно ввести до 512 символов. На рис. 31.20 показан оператор TestOperator, выбранный для уведомления по электронной почте. Включено также дополнительное сообщение.Отметим также поля-счетчики Delay between responses (Задержки между откликами). Они указывают, насколько часто будет извещаться оператор при повторных случаях этого оповещения. Значение 60 минут означает, что уведомление оператору будет отправляться только один раз в течение любого 60-минутного периода.
Для подтверждения введенных вами параметров оповещения и отклика щелкните на кнопке Apply. Затем щелкните на кнопке OK, чтобы закрыть это окно.
Использование Enterprise Manager для создания оповещения по состоянию производительности
Теперь мы используем Enterprise Manager для создания оповещения, которое будет запускаться при возникновении определенного состояния производительности. Отметим, что служба SQLServerAgent опрашивает счетчики производительности с 20-секундными интервалами, поэтому кратковременные пиковые или низкие нагрузки, возникающие между опросами, возможно, не будут обнаруживаться. Чтобы создать оповещение, выполните следующие шаги.
В левой панели Enterprise Manager раскройте папку сервера, раскройте папку Management и затем раскройте папку SQL Server Agent. Щелкните правой кнопкой мыши на Alerts и выберите из контекстного меню пункт New Alert. Появится окно New Alert Properties (рис. 31.21). Во вкладке General в текстовом поле Name введите имя оповещения. (Для данного примера используйте (рис 31.21) Вкладка General окна New Alert Properties
В секции Performance condition alert definition (Определение оповещения по состоянию производительности) нужно определить состояние производительности, по которому будет запускаться это оповещение. Выберите в раскрывающемся списке Object (Объект) объект производительности SQL Server, который хотите использовать для запуска оповещения, и затем выберите в раскрывающемся списке Counter (Счетчик) нужный счетчик. Используйте поле Alert if counter (Оповещение в случае, если счетчик), чтобы указать, в какой ситуации должно запускаться оповещение. И, наконец, задайте пороговое значение (поле Value), переход которого будет приводить к запуску этого оповещения. На рис. 31.21 показаны параметры, используемые для запуска оповещения, когда счетчик SQL Server User Connections превышает значение 100.
Чтобы завершить создание этого оповещения, задайте параметры на вкладке Response, как это описано на шаге 5 предыдущего раздела, щелкните на кнопке Apply и затем щелкните на кнопке OK.
Использование T-SQL для создания оповещения
по событию или по состоянию производительности
Вы можете также использовать для создания оповещений T-SQL, но не забывайте, что если вы создаете оповещения с помощью Enterprise Manager, то можете затем генерировать для этих оповещений сценарии T-SQL. (Для этого щелкните правой кнопкой мыши на Alerts в папке SQL Server Agent, укажите в контекстном меню пункт All Tasks и затем выберите оператор Generate SQL Script.) Вероятно, использование Enterprise Manager вам покажется более легким для создания оповещений, поскольку для метода T-SQL требуется знать и помнить много необязательных параметров вместе с их значениями по умолчанию. Чтобы добавить оповещение с помощью T-SQL, нужно использовать хранимую процедуру sp_add_alert. Эта процедура используется для создания оповещений как по событию, так и по состоянию производительности. Тип создаваемого оповещения указывается соответствующим параметром. Процедура sp_add_alert имеет следующий синтаксис:
sp_add_alert [@name =] 'name'
[, [@message_id =] message_id]
[, [@severity =] severity]
[, [@enabled =] enabled]
[, [@delay_between_responses =] delay_between_responses]
[, [@notification_message =] 'notification_message']
[, [@include_event_description_in =] include_event_description_in]
[, [@database_name =] 'database']
[, [@event_description_keyword =] 'event_description_keyword_pattern']
[, {[@job_id =] job_id | [@job_name =] 'job_name'}]
[, [@raise_snmp_trap =] raise_snmp_trap]
[, [@performance_condition =] 'performance_condition']
[, [@category_name =] 'category']
Для модификации оповещения, просмотра информации оповещения и удаления оповещения используются соответственно хранимые процедуры sp_update_alert, sp_help_alert и sp_delete_alert. Напомним, что все эти хранимые процедуры находятся в базе данных msdb.
Дополнительная информация. Для получения более подробной информации о процедурах, описанных в этом разделе, найдите эти процедуры в индексе Books Online.
Операторы
Операторы – это отдельные люди, которые могут получать уведомление от SQL Server по завершении какого-либо задания или при возникновении какого-либо события. Оператор – это человек, ответственный за обслуживание одной или нескольких систем, на которых работает SQL Server. Вы уже знаете, как определять сообщение уведомления, которое будет отправляться оператору. Как уже говорилось, имеется три метода, используемых для связи с операторами: отправка сообщений электронной почты, отправка на пейджер и использование команды NET SEND (которая отправляет сетевое сообщение на компьютер оператора.) Чтобы можно было применять каждый из этих методов, ваша система должна отвечать определенным требованиям. Для связи через электронную почту и с пейджером вы должны инсталлировать на сервере совместимый с MAPI-1 клиент ("MAPI" означает "Messaging API" – интерфейс прикладного программирования для сообщений), такой как Microsoft Outlook или Microsoft Exchange Client, и должны создать почтовый профиль для службы SQLServerAgent. Для пейджинговой связи вам нужно также инсталлировать на почтовом сервере программное обеспечение сторонних фирм для связи электронной почты с пейджером, которое обрабатывает входные сообщения электронной почты и преобразует их в пейджинговые сообщения. Чтобы использовать NET SEND, у вас должна работать операционная система Windows NT или Windows 2000, поскольку NET SEND не поддерживается в Microsoft Windows 95/98.
Дополнительная информация. Информацию по созданию почтовых профилей см. в документации своего клиентского программного обеспечения для электронной почты. Для получения информации по программному обеспечению для связи пейджер-электронная почта обратитесь к своему провайдеру пейджинговых услуг или к документации вашего пейджера.
Вы должны определить каждого оператора в SQL Server. Вы можете создать несколько операторов для разделения между ними обязанностей, а также резервного оператора, который получит уведомление, когда недоступны другие операторы (например, когда не проходит сообщение на пейджер). Вы можете создать оператора с помощью Enterprise Manager, T-SQL или SQL-DMO. Мы рассмотрим в этом разделе использование Enterprise Manager и T-SQL; метод SQL-DMO выходит за рамки материала этой книги.
Использование Enterprise Manager для создания оператора
Чтобы создать оператора с помощью Enterprise Manager, выполните следующие шаги.
В левой панели Enterprise Manager раскройте папку сервера, раскройте папку Management и затем раскройте папку SQL Server Agent. Щелкните правой кнопкой мыши на Operators и выберите из контекстного меню пункт New Operator, чтобы появилось окно New Operator Properties (Свойства нового оператора) (рис. 31.22). Во вкладке General введите имя нового оператора и затем заполните все или некоторые из следующих данных: адрес электронной почты этого оператора, адрес пейджера и адрес для команды (рис 31.22) Вкладка General окна New Operator Properties (Свойства нового оператора)Если вы ввели адрес пейджера, то можете задать в секции Pager on duty schedule (Расписание дежурства на пейджере) дни и периоды времени, когда можно отправлять сообщения этому оператору. Например, если у вас несколько операторов, то вы можете разделять между ними время работы, когда один оператор получает сообщения на пейджер в понедельник, среду и пятницу, а второй – во вторник, четверг и субботу.
Щелкните на вкладке Notifications. Если щелкнуть на кнопке выбора Alerts (в верхнем правом углу), то появится список существующих оповещений (рис 31.23(рис 31.23) Вкладка Notifications окна New Operator Properties со списком оповещений
При создании нового оператора кнопка выбора Jobs для вас недоступна, так как нет таких заданий, которые бы уведомляли нового оператора, поскольку новый оператор еще не создан. Чтобы новый оператор не получал уведомлений, сбросьте флажок Operator is available to receive notifications (Оператор доступен для получения уведомлений). Отключение этой возможности позволяет вам временно приостанавливать отправку уведомлений оператору, например, когда данный оператор в отпуске. Вы можете затем снова активизировать отправку уведомлений, повторно установив этот флажок, когда оператор вернется к работе.
Щелкните на кнопке Send E-mail (Отправить электронную почту), чтобы создать тестовое сообщение для отправки оператору, представленному во вкладке General. (Вы получите сообщение об ошибке, если не указали адрес электронной почты во вкладке General.) Затем вы можете отправить сообщение электронной почты, в котором описываются типы уведомлений, заданные для этого оператора. Внизу вкладки Notifications вы увидите информацию о последних попытках уведомлений этому оператору по типам используемых средств отправки.
Использование T-SQL для создания оператора
Команды T-SQL, используемые для создания оператора, модифицирования информации об операторе, просмотра информации об операторе и удаления оператора, – это соответствующие хранимые процедуры, находящиеся в базе данных msdb: sp_add_operator, sp_update_operator, sp_help_operator и sp_delete_operator. И здесь вы увидите, что вам легче использовать Enterprise Manager. Вы можете генерировать сценарии T-SQL после того, как создали оператора с помощью Enterprise Manager:
Ниже представлен синтаксис sp_add_operator:
sp_add_operator [@name =] 'name'
[, [@enabled =] enabled]
[, [@email_address =] 'email_address']
[, [@pager_address =] 'pager_address']
[, [@weekday_pager_start_time =] weekday_pager_start_time]
[, [@weekday_pager_end_time =] weekday_pager_end_time]
[, [@saturday_pager_start_time =] saturday_pager_start_time]
[, [@saturday_pager_end_time =] saturday_pager_end_time]
[, [@sunday_pager_start_time =] sunday_pager_start_time]
[, [@sunday_pager_end_time =] sunday_pager_end_time]
[, [@pager_days =] pager_days]
[, [@netsend_address =] 'netsend_address']
[, [@category_name =] 'category']
Дополнительная информация. Чтобы получить подробное описание параметров хранимых процедур, перечисленных в этом разделе, найдите имя соответствующей хранимой процедуры в индексе Books Online.
Журнал ошибок службы SQLServerAgent
Служба SQLServerAgent имеет собственный журнал ошибок, в который записываются запуск и отключение SQLServerAgent и любые предупреждения, ошибки и информационные сообщения, связанные с заданием или оповещением SQLServerAgent. Чтобы использовать журнал ошибок SQLServerAgent, выполните следующие шаги.
В Enterprise Manager раскройте папку сервера и раскройте папку Management. Щелкните правой кнопкой мыши на SQL Server Agent и выберите из контекстного меню пункт Display Error Log (Показать журнал ошибок). Появится журнал ошибок (рис 31.24(рис 31.24) Диалоговое окно SQL Server Agent Error Log
В раскрывающемся списке Type (Тип) вы может выбирать просмотр сообщений об ошибках, предупреждающих сообщений, информационных сообщений или все трех типов (All Types). На рис 31.25(рис 31.25) Диалоговое окно SQL Server Agent Error Log, где показаны все типы сообщений
Каждый раз, как вы запускаете SQLServerAgent, происходит повторный запуск журнала ошибок с перезаписью всех существующих сообщений этого журнала. Вы можете искать сообщение, содержащее определенную строку, набрав эту строку в текстовом поле Containing Text (Содержит текст) и нажав затем клавишу Enter или щелкнув на кнопке Apply Filter (Применить фильтр). На рис 31.26(рис 31.26) Результаты поиска определенной строки в сообщениях журнала ошибок
Дважды щелкните на самом сообщении, чтобы появилось диалоговое окно SQL Server Agent Error Log Message (Сообщение журнала ошибок SQL Server Agent) (рис. 31.27). Если в результате поиска будет показано несколько сообщений, то вы можете использовать для перехода между сообщениями кнопки Next (Следующее) и Previous (Предыдущее). Эти кнопки недоступны, если найдено только одно сообщение.В журнал ошибок SQLServerAgent поступает сообщение об ошибке, если по какой-либо причине недоступен оператор или не выполняется задание. Вам следует время от времени просматривать журнал ошибок, чтобы определить наличие ошибок, на которые нужно обратить внимание.
(рис 31.27) Диалоговое окно SQL Server Agent Error Log Message
Заключение
В этой лекции вы узнали, как использовать службу SQLServerAgent для автоматизации некоторых административных задач путем определения заданий и операторов, создания уведомлений для операторов, а также создания оповещений по событиям и состояниям производительности. Вы узнали о том, насколько важно использовать уровни серьезности ошибок при создании оповещений и как изменять статус протоколирования сообщения об ошибке, чтобы оно записывалось в журнал событий Windows NT или Windows 2000. И вы узнали, как просматривать файл журнала ошибок службы SQLServerAgent, в который записывается информация о SQLServerAgent, а также любые сообщения об ошибках и предупреждения, возникшие во время оповещений и заданий. В лекции 32 мы рассмотрим резервное копирование баз данных SQL Server.
В лекции 30 мы рассмотрели некоторые из параметров автоматического конфигурирования и параметров баз данных, входящих в Microsoft SQL Server 2000 и помогающих снизить объем работы DBA по настройке баз данных. В этой лекции вы узнаете, как использовать некоторые дополнительные средства, предоставляемые в SQL Server, для автоматизации других административных задач с помощью службы SQLServerAgent. Служба SQLServerAgent позволяет автоматически выполнять определенные периодические задачи с базой данных и оповещать DBA или другое указанное лицо о том, что на сервере возникла какая-либо проблема или событие. Использование этих возможностей позволяет DBA обходиться без ручного и непрерывного мониторинга системы баз данных, чтобы определять, когда должны выполняться определенные задачи, что позволяет выделить время для более сложных вопросов по базам данных, таких как построение и настройка индексов, оптимизация запросов или планирование будущего роста.
Для автоматизации административных задач используются три основных средства: задания (jobs), оповещения (alerts) и операторы (operators). В этой лекции вы узнаете о службе SQLServerAgent и о том, как использовать эту службу для создания и использования заданий, оповещений и операторов. Вы также узнаете о журнале ошибок SQLServerAgent, который можете использовать для слежения за работой, выполняемой SQLServerAgent.
Служба SQLServerAgent
Агент SQL Server Agent запускается отдельно от SQL Server, как служба с именем SQLServerAgent. Эта служба включена в состав SQL Server 2000, но она должна запускаться отдельно – вручную или автоматически. (Об инструкциях по запуску SQLServerAgent см. лекцию 8.) После запуска этой службы вы можете переходить к определению любых нужных вам заданий, оповещений и операторов.
Примечание.Служба SQLServerAgent называлась SQL Executive в Microsoft SQL Server 6.5 и более ранних версиях. Она также используется для репликации. (См. лекции 26, 27 и 28.)
Задания
Задания – это административные задачи, которые определяются один раз и могут выполняться многократно. Вы можете запускать задание вручную, а также планировать запуск задания системой SQL Server в определенное время, в соответствии с регулярным расписанием или при возникновении оповещения. (Об оповещениях описаны далее в разделе "Оповещения".) Задания могут состоять из операторов Transact-SQL (T-SQL), команд Microsoft Windows NT или Microsoft Windows 2000, исполняемых программ или сценариев Microsoft ActiveX. Задания также автоматически создаются для вас, когда вы используете репликацию или создаете план обслуживания базы данных. Задание может состоять из одного или нескольких шагов, и каждый шаг может быть вызовом более сложного набора шагов, например обращением к хранимой процедуре. SQL Server автоматически следит за результатом выполнения заданий (успешное или неуспешное завершение); вы можете задавать оповещения, которые будут отправляться в каждом случае.
Задания могут выполняться локально на сервере, а в случае нескольких серверов в сети вы можете назначать один из серверов как главный сервер, а остальные серверы – как серверы-получатели. На главном сервере хранятся определения заданий для всех серверов, и этот сервер действует как центр обмена информацией для координирования работы всех заданий. Каждый сервер-получатель периодически подсоединяется к главному серверу, обновляет список своих заданий, если какие-либо задания изменились, загружает любые новые задания с главного сервера и затем отсоединяется для выполнения этих заданий. Когда сервер-получатель завершает какое-либо задание, он снова подсоединяется к главному серверу и сообщает о статусе его завершения.
Рассмотрим ситуацию, в которой вам может потребоваться создать задание. Предположим, что у вас имеется таблица базы данных, в которой ведется запись по каждой выполненной в банковской среде транзакции, такой как вклад денег на счет, снятие денег со счета и перевод (трансферт) денег. Каждая запись содержит колонку временной метки (timestamp),где указывается время выполнения транзакции. Эта таблица непрерывно растет, и ее нужно периодически сокращать. Для удаления строк из этой таблицы вы можете написать небольшую хранимую процедуру, в которой используется оператор DELETE для удаления строк, которые хранятся больше двух месяцев (в предположении, что банк должен хранить записи только два месяца). Затем вы можете создать задание для выполнения этой хранимой процедуры раз в неделю, например в ночь на воскресенье. Тем самым вы можете воспрепятствовать бесконечному росту данной таблицы. Это позволяет экономить пространство на диске и, кроме того, обычно повышает производительность. При меньшем количестве данных, среди которых выполняется по запросу, SQL Server может быстрее выполнить этот запрос. А теперь перейдем к подробностям создания заданий.
Примечание.Для работы ваших заданий должна быть запущена служба SQLServerAgent.
Создание задания
Чтобы определить задание, вы можете использовать Enterprise Manager, сценарии
T-SQL, мастер создания заданий Create Job Wizard или SQL-Distributed Management Objects (SQL-DMO). Поскольку метод SQL-DMO связан с программированием, он выходит за рамки материала этой книги. В этом разделе вы узнаете о трех других методах создания заданий.
Дополнительная информация. Для получения информации по созданию заданий найдите "jobs" (задания) в индексе Books Online и выберите тему "Creating SQL Server Agent Jobs (SQL-DMO)" (создание заданий SQL Server Agent [SQL-DMO]) в диалоговом окне Topics Found (Найденные темы).
Использование Enterprise Manager
Сначала создадим задание с помощью Enterprise Manager. Один из наиболее распространенных случаев применения заданий – это резервное копирование баз данных. (Для этого можно также использовать мастер плана обслуживания Maintenance Plan Wizard, см. лекцию 30.) В следующем примере создается задание на резервное копирование базы данных MyDB. В нем запланированы запуск резервного копирования каждый вечер в 11 P.M. (23:00) и запись результата завершения этого задания (успешное или неуспешное) в журнал событий приложения Windows NT или Windows 2000 и в выходной файл. Для создания этого задания, которое мы назовем MyDB_backup_job, выполните следующие шаги.
В левой панели Enterprise Manager раскройте папку сервера, раскройте папку Management (Управление) и затем раскройте папку SQL Server Agent. Щелкните правой кнопкой мыши на Jobs (Задания) и выберите из контекстного меню пункт New Job (Создать задание). Появится окно New Job Properties (Свойства нового задания) (рис 31.1(рис 31.1) Вкладка General окна New Job Properties (Свойства нового задания)
Во вкладке General задайте следующие параметры:Name (Имя). Введите в текстовом поле Name имя задания (в данном случае – MyDB_backup_job ). Имя задания может содержать до 128 символов. Каждое задание на сервере должно иметь уникальное имя. Постарайтесь задать описательное имя.
Enabled (Активизировать). Установленный флажок Enabled указывает, что задание должно быть активизировано. Возможно, вы захотите сначала деактивизировать задание, чтобы проверить его вручную и убедиться, что оно правильно работает. Проверив задание и убедившись в правильности его работы, используйте этот флажок для активизации задания, чтобы оно автоматически запускалось в соответствии с расписанием.
Category (Категория).Выберите категорию для задания; в данном случае мы используем принятую по умолчанию категорию Uncategorized (Local) (Без категории [Локально]). Вы можете выбирать из списка категорий, которые создаются при инсталляции SQL Server, или можете создавать свои собственные категории. (О создании новой категории см. в подразделе "Создание новой категории" далее.) В список инсталлированных категорий входят Uncategorized (Local), Database Maintenance (Обслуживание базы данных), Full Text (Полнотекстовый поиск), Web Assistant (Web-помощник) и 10 категорий для репликации. Категории используются для группирования родственных заданий. Например, вы можете группировать в одной категории все задания, которые используются для выполнения задач обслуживания базы данных, или группировать задания по отделам, таким как отделы бухгалтерского учета, продаж и маркетинга. Категории позволяют вам следить за несколькими заданиями: вам не нужно просматривать весь список заданий, когда вас интересует только определенная часть заданий.
Owner (Владелец). Владелец – это пользователь, который создает задание, или пользователь, для которого создается задание. Только роли sysadmin позволяют изменять владельца задания или изменять задание, владельцем которого является другой пользователь. (О роли SQL Server см. лекцию 34). Все роли sysadmin, а также владелец задания могут изменять определение задания, а также запускать и останавливать задание. В раскрывающемся списке Owner всегда выбирайте пользователя, который будет выполнять задание. В данном примере используется пользователь, который создает задание, поэтому соответствующий пользователь выбран автоматически, и вы можете оставить этот выбор без изменений.
Description (Описание).В текстовом поле Description вы указываете, какие задачи выполняет этот задание, и цель этого задания. Вам следует всегда вводить описание. Это позволяет другим пользователям быстро определять, для чего предназначено задание. Описание может содержать до 512 символов.
Target local server (На локальном сервере). Если щелкнуть на этой кнопке выбора, то задание будет выполняться только на локальном сервере. Если к данному серверу подсоединены удаленные серверы, то будет доступна кнопка выбора Target multiple servers (На нескольких серверах). Щелкните на этой кнопке выбора, чтобы указать удаленные серверы, на которых также будет запускаться это задание.
На рис 31.2(рис 31.2) Заполненная вкладка General
Щелкните на вкладке Steps (Шаги) и щелкните на New (Создать), чтобы появилось диалоговое окно New Job Step (Новый шаг задания) (рис. 31.3). Шаги задания – это команды или операторы, которые определяют задачи данного задания. Каждое задание должно содержать хотя бы один шаг и может содержать несколько шагов. Во вкладке General диалогового окна New Job Step введите следующую информацию:В текстовом поле Step name (Имя шага) введите имя данного шага (в данном случае введите MyDB_backup ).
В раскрывающемся списке Type (Тип) выберите тип шага. В данном примере выберите Transact-SQL Script (TSQL) (Сценарий T-SQL), поскольку для выполнения этого задания мы будем использовать команды T-SQL. Среди других вариантов выбора – ActiveX Script (Сценарий ActiveX), Operating System Command (Команда операционной системы), Replication Distributor (Дистрибьютор репликации), Replication Transaction-Log Reader (Репликация, чтение журнала транзакций), Replication Merge (Репликация слиянием), QueueReader (Репликация, чтение данных из очереди) и Replication Snapshot (Репликация моментального снимка).
(рис 31.3) Заполненная вкладка General диалогового окна New Job Step (Новый шаг задания)
В раскрывающемся списке Database (База данных) выберите имя базы данных, с которой будет работать данное задание. Для данного примера выберите базу данных MyDB.
В текстовом поле Command (Команда) введите команды, которые хотите включить в данный шаг. Для данного примера это команды T-SQL для резервного копирования базы данных MyDB устройство резервного копирования с именем MyDB_backup1. Это устройство должно быть создано заранее. (О создании устройств резервного копирования см. лекцию 32.} Кроме того, наш случай – это простой пример, в котором резервная копия базы данных будет записываться в один и тот же файл каждую ночь. На практике для выполнения резервного копирования вам следует использовать план обслуживания базы данных (см. лекцию 30), поскольку это позволит вам создавать новое устройство резервного копирования на каждый день. Вы можете также щелкнуть на кнопке Open (Открыть), чтобы открыть файл, если у вас есть подготовленный сценарий, который вы хотите ввести как задание.
Щелкните на кнопке Parse (Синтаксический разбор), чтобы проверить синтаксис ваших шагов T-SQL, и затем щелкните на вкладке Advanced (Дополнительно) и задайте параметры (рис 31.4(рис 31.4) Заполненная вкладка Advanced (Дополнительно) диалогового окна New Job Step
Щелкните на кнопке Apply (Применить) и затем щелкните на кнопке OK, чтобы вернуться во вкладку Steps окна New Job Properties, где вы можете при необходимости определить другие шаги задания. Щелкните на кнопке New, чтобы добавить новый шаг вслед за существующим шагом. Чтобы вставить новый шаг перед существующим шагом, выделите этот существующий шаг и затем щелкните на кнопке Insert (Вставить), чтобы появилось окно New Job Step. Введите информацию для шага, который вы хотите вставить. Для удаления шага выделите этот шаг и щелкните на кнопке Delete (Удалить); для редактирования шага выделите его и щелкните на кнопке Edit (Редактирование). Вы можете также переместить шаг в списке, выделив его и щелкая на кнопке "стрелка вверх" или "стрелка вниз" справа от метки Move Step (Переместить шаг). В раскрывающемся списке Start Step (Начальный шаг) вы можете выбрать шаг, который будет выполняться первым в данном задании. Рядом с идентификационным номером шага, который будет выполняться первым, появится зеленый флаг. Щелкните на кнопке Apply, чтобы включить ваши шаги в задание. Если логика последовательности выполняемых шагов приводит к тому, что не будет выполняться какой-либо шаг, то после щелчка на кнопке Apply SQL Server выведет предупреждающее сообщение и позволит вам изменить логику последовательности.
Чтобы создать расписание для этого задания, щелкните на вкладке Schedules (Расписания). Чтобы найти текущее время на каком-либо сервере, выберите имя этого сервера в раскрывающемся списке NOTE: The Current Date/Time On Target Server (Текущие дата/время на целевом сервере). Щелкните на кнопке New Schedule (Создать расписание), чтобы появилось диалоговое окно New Job Schedule (Новое расписание задания) (рис 31.5(рис 31.5) Диалоговое окно New Job Schedule (Новое расписание задания)
Поскольку мы выбрали расписание повторяющегося типа, то вы должны задать моменты времени и дни, когда должно запускаться это задание. Для этого щелкните на кнопке Change (Изменить), чтобы появилось диалоговое окно Edit Recurring Job Schedule (Редактировать расписание повторяющихся заданий). Введите новые моменты времени и дни, затем щелкните на кнопке OK, чтобы вернуться в диалоговое окно New Job Schedule. (Напомним, что нам нужно задать ежедневное резервное копирование, которое будет запускаться в 11 P.M.)
Щелкните на кнопке OK в диалоговом окне New Job Schedule, чтобы согласиться с расписанием и вернуться в окно New Job Properties. Чтобы удалить какое-либо расписание, выделите имя этого расписания и щелкните на кнопке Delete. Чтобы отредактировать какое-либо расписание, выделите имя этого расписания и щелкните на кнопке Edit.Примечание. Вы можете также создать новое оповещение для этого задания. Оповещения подробно рассматриваются далее.
Щелкните на вкладке Notifications (Уведомления) (рис 31.6(рис 31.6) Вкладка Notifications (Уведомления) окна New Job Properties
Закончив формирование параметров, щелкните на кнопке Apply, чтобы создать ваше задание, и затем щелкните на кнопке OK, чтобы выйти из окна New Job Properties и вернуться в Enterprise Manager.
Щелкните на строке Jobs в левой панели Enterprise Manager. Вы увидите задание MyDB_backup_job, включенное в список заданий в правой панели.
Создание новой категории. Чтобы создать новую категорию, раскройте сервер в левой панели Enterprise Manager, раскройте папку Management (Управление), щелкните правой кнопкой мыши на строке Jobs, укажите в контекстном меню пункт All Tasks (Все задачи) и затем выберите команду Manage Job Categories (Управление категориями заданий). Появится диалоговое окно Job Categories (Категории заданий) (рис. 31.7), где вы можете добавлять новые категории, просматривать существующие категории и задания, которые в них входят, и удалять категории.
(рис 31.7) Диалоговое окно Job Categories (Категории заданий)
Использование T-SQL
Команды T-SQL, используемые для создания задания, добавления шагов к заданию и создания расписания для задания, – это системные хранимые процедуры sp_add_job, sp_add_jobstep и sp_add_jobschedule. Эти хранимые процедуры имеют много необязательных параметров, как это показано в их синтаксисе, представленном в этом разделе. SQL Server присваивает каждому неуказанному параметру значение по умолчанию. Enterprise Manager намного удобнее для создания заданий, поскольку его графический пользовательский интерфейс позволяет вам увидеть все параметры для задания, чтобы вы ничего не забыли. Используя T-SQL, вы должны задавать значения для всех необязательных параметров или быть уверенным в том, что принятые по умолчанию значения всех пропущенных вами параметров подходят для вашего задания. Вместо запуска этих хранимых процедур вручную вам следует использовать Enterprise Manager. Вы можете затем генерировать сценарии T-SQL, которые использовал Enterprise Manager для создания вашего задания; для этого щелкните правой кнопкой мыши на имени этого задания, укажите в контекстном меню All Tasks и выберите команду Generate SQL Script (Генерировать SQL-сценарий). Этот метод поможет вам повторно создать задание с помощью сценария, если это когда-нибудь потребуется.
Для запуска этих хранимых процедур вы должны использовать базу данных msdb, поскольку они хранятся в этой базе данных. Рассмотрим параметры, которые указываются в этих хранимых процедурах, – на тот случай, если вы все же захотите использовать их. Для всех хранимых процедур, описанных в этом разделе, используется один общий синтаксис. Хранимая процедура sp_add_job имеет следующий синтаксис:
sp_add_job [@job_name =] 'job_name'
[,[@enabled =] enabled]
[,[@description =] 'description']
[,[@start_step_id =] step_id]
[,[@category_name =] 'category']
[,[@category_id =] category_id]
[,[@owner_login_name =] 'login']
[,[@notify_level_eventlog =] eventlog_level]
[,[@notify_level_email =] email_level]
[,[@notify_level_netsend =] netsend_level]
[,[@notify_level_page =] page_level]
[,[@notify_email_operator_name =] 'email_name']
[,[@notify_netsend_operator_name =] 'netsend_name']
[,[@notify_page_operator_name =] 'page_name']
[,[@delete_level =] delete_level]
[,[@originating_server =] 'server_name'
[,[@job_id =] job_id OUTPUT]
Процедура sp_add_jobstep имеет следующий синтаксис:
sp_add_jobstep [@job_id =] job_id | [@job_name =] 'job_name']
[,[@step_id =] step_id]
{,[@step_name =] 'step_name'}
[,[@subsystem =] 'subsystem']
[,[@command =] 'command']
[,[@additional_parameters =] 'parameters']
[,[@cmdexec_success_code =] code]
[,[@on_success_action =] success_action]
[,[@on_success_step_id =] success_step_id]
[,[@on_fail_action =] fail_action]
[,[@on_fail_step_id =] fail_step_id]
[,[@server =] 'server']
[,[@database_name =] 'database']
[,[@database_user_name =] 'user']
[,[@retry_attempts =] retry_attempts]
[,[@retry_interval =] retry_interval]
[,[@os_run_priority =] run_priority]
[,[@output_file_name =] 'file_name']
[,[@flags =] flags]
Процедура sp_add_jobschedule имеет следующий синтаксис:
sp_add_jobschedule [@job_id =] job_id, | [@job_name =] 'job_name',
[@name =] 'name'
[,[@enabled =] enabled]
[,[@freq_type =] freq_type]
[,[@freq_interval =] freq_interval]
[,[@freq_subday_type =] freq_subday_type]
[,[@freq_subday_interval =] freq_subday_interval]
[,[@freq_relative_interval =] freq_relative_interval]
[,[@freq_recurrence_factor =] freq_recurrence_factor]
[,[@active_start_date =] active_start_date]
[,[@active_end_date =] active_end_date]
[,[@active_start_time =] active_start_time]
[,[@active_end_time =] active_end_time]
Дополнительная информация.Чтобы получить описание каждого параметра и его значения по умолчанию, найдите имя соответствующей хранимой процедуры в индексе Books Online.
Примечание. Описанные здесь хранимые процедуры, как и другие хранимые процедуры, связанные с созданием и управлением для заданий, операторов, уведомлений и оповещений, хранятся в базе данных msdb. Для запуска этих процедур у вас должна использоваться эта база данных.
Использование мастера Create Job Wizard
В состав Enterprise Manager включен мастер, который помогает вам пройти через процесс формирования заданий в пошаговом режиме. Правда, этот мастер ограничен в том, что вы можете создать только один шаг задания. Тем не менее он позволяет вам создавать расписание для задания и указывать операторов, которые будут получать уведомление о статусе задания. Создав такое задание, вы можете затем добавлять к нему новые шаги, модифицируя задание с помощью Enterprise Manager.
Чтобы использовать мастер Create Job Wizard, выполните следующие шаги.
В Enterprise Manager выберите из меню Tools пункт Wizards (Мастера) в появившемся диалоговом окне Select Wizard (Выбор мастера) раскройте папку Management и выберите Create Job Wizard, чтобы появилось начальное окно мастера Create Job Wizard (рис 31.8(рис 31.8) Начальное окно мастера Create Job Wizard
Щелкните на кнопке Next, чтобы появилось окно Select job command type (Выбор типа команды для задания) (рис 31.9(рис 31.9) Окно Select job command type (Выбор типа команды для задания).
Щелкните на кнопке Next, чтобы появилось окно Enter Transact-SQL Statement (Ввод оператора T-SQL) (рис 31.10(рис 31.10) Окно Enter Transact-SQL Statement (Ввод оператора T-SQL)
Щелкните на кнопке Next, чтобы появилось окно Specify job schedule (Задать расписание задания) (рис 31.11Вариант Now (Сейчас) указывает, что задание будет запущено, как только мастер завершит свою работу. Назначение других кнопок выбора описывается их названием. Для данного примера щелкните на кнопке выбора On a recurring basis (На повторяющейся основе) и затем щелкните на кнопке Schedule, чтобы задать расписание. Появится диалоговое окно Edit Recurring Job Schedule (рис 31.12(рис 31.12) Окно Specify job schedule (Задать расписание задания)(рис 31.11) Диалоговое окно Edit Recurring Job Schedule
Щелкните на кнопке Next, чтобы появилось окно Job Notifications (Уведомления для задания) (рис 31.13(рис 31.13) Окно Job Notifications (Уведомления для задания)В раскрывающихся списках Net send и/или E-mail выберите оператора, который будет получать уведомление о статусе завершения этого задания. У вас уже должны быть определены операторы, чтобы они появились в раскрывающемся списке. На рис. 31.13 не определено ни одного оператора (No operators). Если вы хотите уведомлять оператора, который еще не определен, завершите работу мастера и затем добавьте этого оператора, как это описано в разделе "Операторы" далее. Вы можете затем модифицировать свойства задания, включив уведомление для этого оператора. Вы можете также прекратить работу мастера, создать оператора и затем снова выполнить запуск мастера.
Щелкните на кнопке Next, чтобы появилось окно Completing the Create Job Wizard (Завершение работы мастера) (рис. 31.14). Здесь вы можете назначить имя задания, заменив заданное по умолчанию имя в текстовом поле Job Name (Имя задания); в данном примере ваше задание названо (рис 31.14) Окно Completing the Create Job WizardПосле завершения работы мастера Create Job Wizard это новое задание появится в папке Jobs окна Enterprise Manager.
Управление заданием
Вы можете управлять вашими заданиями и редактировать их в Enterprise Manager или с помощью T-SQL. И здесь для вас будет проще использовать Enterprise Manager, поскольку вам не нужно заботиться о синтаксисе и значениях по умолчанию, связанных с хранимыми процедурами T-SQL, поскольку графический интерфейс Enterprise Manager помогает вам пройти через всю установку свойств задания.
Использование Enterprise Manager
С помощью Enterprise Manager вы можете вручную запускать, останавливать, деактивизировать, активизировать и редактировать задание, а также создавать для него сценарии T-SQL. Ниже приводятся инструкции для каждой из этих задач.
Для запуска задания щелкните правой кнопкой мыши на имени этого задания в правой панели Enterprise Manager и выберите из контекстного меню пункт Start Job (Запустить задание).
Для остановки текущего выполняемого задания и отмены всех повторных попыток, сконфигурированных для этого задания, щелкните правой кнопкой мыши на имени задания и выберите из контекстного меню пункт Stop Job (Остановить задание).
Чтобы деактивизировать задание для его последующего тестирования, не допуская его запуска в запланированное время или по какой-либо другой причине, щелкните правой кнопкой мыши на имени этого задания и выберите из контекстного меню пункт Disable Job (Деактивизировать задание). Чтобы снова активизировать задание, выберите пункт Enable Job.
Чтобы редактировать задание, расписание или любое другое свойство задания, щелкните правой кнопкой мыши на имени этого задания и выберите из контекстного меню пункт Properties, чтобы появилось окно свойств задания Properties, которое содержит те же четыре вкладки, которые вы использовали для создания этого задания. Внесите свои изменения, щелкните на кнопке Apply и затем щелкните на кнопке OK.
Чтобы создать сценарий T-SQL для вашего задания на тот случай, если вы захотите снова создать этот задание без повторного ввода операторов T-SQL, щелкните правой кнопкой мыши на имени этого задания, укажите в контекстном меню пункт All Tasks и затем выберите команду Generate SQL Script, чтобы появилось диалоговое окно Generate SQL Script. Введите имя файла, выберите формат файла (Unicode, ANSI или текст OEM) и щелкните на кнопке OK.
Использование T-SQL
Вы можете также запускать, останавливать, активизировать, деактивизировать и редактировать задание с помощью следующих хранимых процедур T-SQL. Не забудьте, что при выполнении этих процедур у вас должна использоваться база данных msdb.
sp_start_job. Сразу запускает указанное задание. В этой процедуре нужно указывать имя задания или идентификационный номер задания.
sp_stop_job. Останавливает текущее выполняемое задание. В этой процедуре нужно указывать имя задания, идентификационный номер задания или имя главного сервера.
sp_update_job. Позволяет вам активизировать, деактивизировать и изменять свойства задания. В этой процедуре нужно указывать имя задания или идентификационный номер задания.
Дополнительная информация. Для просмотра синтаксиса этих процедур и параметров, которые используются при их вызове, найдите нужную хранимую процедуру в индексе Books Online.
Просмотр журнала выполнения задания
SQL Server поддерживает журнал (историю) с информацией о выполнении задания в таблице sysjobhistory системной базы данных msdb. Вы можете просмотреть информацию журнала выполнения задания с помощью Enterprise Manager или T-SQL.
Использование Enterprise Manager
Для просмотра журнала задания с помощью Enterprise Manager выполните следующие шаги.
Щелкните правой кнопкой мыши на имени задания в правой панели Enterprise Manager и выберите из контекстного меню пункт View Job History (Просмотр журнала задания), чтобы появилось диалоговое окно Job History (рис 31.15(рис 31.15) Диалоговое окно Job History (Журнал заданий)
Для просмотра дополнительных подробностей о статусе выполнения задания установите флажок Show step details (Показать подробности по шагам) в верхнем правом углу этого диалогового окна. На рис 31.16(рис 31.16) Подробности по шагам, представленные в диалоговом окне Job History
Для удаления всех сообщений щелкните на кнопке Clear All (Очистить все). Для обновления экрана, чтобы можно было увидеть статус любых новых заданий, которые были запущены после того, как вы открыли диалоговое окно Job History, щелкните на кнопке Refresh (Обновить). Чтобы закрыть диалоговое окно Job History, щелкните на кнопке Close (Закрыть).
Использование T-SQL
Для просмотра журнала с информацией о выполнении запланированных заданий с помощью T-SQL запустите хранимую процедуру sp_help_jobhistory в базе данных msdb. Эта процедура имеет следующий синтаксис:
sp_help_jobhistory [[@job_id =] job_id]
[, [@job_name =] 'job_name']
[, [@step_id =] step_id]
[, [@sql_message_id =] sql_message_id]
[, [@sql_severity =] sql_severity]
[, [@start_run_date =] start_run_date]
[, [@end_run_date =] end_run_date]
[, [@start_run_time =] start_run_time]
[, [@end_run_time =] end_run_time]
[, [@minimum_run_duration =] minimum_run_duration]
[, [@run_status =] run_status]
[, [@minimum_retries =] minimum_retries]
[, [@oldest_first =] oldest_first]
[, [@server =] 'server']
[, [@mode =] 'mode']
Если запустить эту процедуру без параметров или без параметра job id (Идентификатор задания) или job name (Имя задания), то будет возвращена информация обо всех запланированных заданиях. Параметр mode (режим) указывает, нужно ли возвращать всю информацию журнала задания ( FULL ) или только сводку ( SUMMARY ). Значение по умолчанию – SUMMARY.
Дополнительная информация. Для получения подробной информации обо всех других параметрах этой хранимой процедуры найдите "sp_help_jobhistory" в индексе Books Online.
Оповещения
Оповещение – это действие, которое возникает на сервере в ответ на событие или состояние производительности. Оповещения могут реализоваться как уведомления операторам, могут инициировать запуск указанных заданий и могут перенаправлять события другому серверу. Событие – это ошибка или сообщение, которые записываются в журнал событий приложений Windows NT или Windows 2000 (вы можете просматривать этот журнал с помощью утилиты Event Viewer, поставляемой вместе с Windows NT или Windows 2000). Состояние производительности – это характеристика работы системы, доступная для мониторинга с помощью Performance Monitor (Windows NT) или System Monitor (Windows 2000), такая как процент использования ЦП или количество блокировок, используемых SQL Server. В этой лекции мы будем рассматривать System Monitor в Windows 2000, хотя Performance Monitor в Windows NT действует почти так же.
При возникновении какого-либо события служба SQLServerAgent сравнивает это событие со списком определенных вами оповещений, и если для этого события существует оповещение, то происходит запуск этого оповещения.
Запуск оповещения для определенного состояния производительности происходит в том случае, если указанный объект SQL Server в System Monitor достигает определенного порогового значения производительности, например, счетчик User Connections (Количество пользовательских соединений) внутри объекта General Statistics (Общая статистика) в System Monitor. Например, вы можете указать запуск оповещения, если значение этого счетчика достигнет 50. (О работе System Monitor описывается см. лекцию 36.)
Примечание. Для запуска оповещений требуется, чтобы работала служба SQLServerAgent.
Протоколирование сообщений в журнале
событий
Прежде чем перейти к созданию оповещения для какого-либо события, мы рассмотрим типы событий, которые приводят к передаче сообщений в журнал событий приложений Windows NT или Windows 2000; только эти события можно использовать для создания оповещений. События (или ошибки) с уровнем серьезности (severity level) от 19 до 25 автоматически передаются в журнал событий приложений Windows NT или Windows 2000 и поэтому могут использоваться для запуска оповещений. По умолчанию события с уровнем серьезности меньше 19 не протоколируются в журнале, и поэтому эти события не могут использоваться для запуска оповещений. Чтобы эти события протоколировались в журнале, вы должны использовать sp_altermessage, оператор RAISERROR WITH LOG или xp_logevent, позволяющие изменить статус протоколирования события или сообщения. В данном разделе вы узнаете, как создавать определенное пользователем сообщение о событии и как изменять это сообщение, чтобы обеспечить его запись в журнал событий приложений.
Примечание. Если сообщение SQL Server протоколируется в журнале событий приложений Windows NT или Windows 2000, то оно также протоколируется в журнале SQL Server. Для просмотра журнала SQL Server в Enterprise Manager раскройте папку Management для вашего сервера и раскройте папку SQL Server Logs.
Создание определенного пользователем сообщения о событии
Вся информация для системных и определенных пользователем сообщений сохраняется в таблице sysmessages базы данных master. Чтобы создать определенное пользователем сообщение, используйте системную хранимую процедуру T-SQL sp_addmessage. Она имеет следующий синтаксис:
sp_addmessage [@msg_num =] msg_id,
[@severity=] severity,
[@msg_text=] 'msg_text'
[,[@lang =] 'language']
[,[@with_log=] 'with_log']
[,[@replace =] 'replace']
Определенное пользователем сообщение должно иметь значение идентификатора сообщения ( msg_id ) 50001 или больше. Параметр severity – это уровень серьезности ошибки, на который ссылается сообщение, в диапазоне от 1 до 25, причем более высокие значения означают более высокий уровень серьезности ошибки. Уровни серьезности от 19 до 25 может задавать только системный администратор. Параметр msg_text – это текст сообщения об ошибке, который появится в журнале событий приложений при возникновении данной ошибки. Параметр language указывает, на каком языке будет написано сообщение, поскольку вместе с SQL Server может быть инсталлировано несколько языков. Параметр with_log (с журналом) может иметь значение TRUE или FALSE, указывая, будет ли данное сообщение всегда протоколироваться в журнале событий приложений Windows NT или Windows 2000. Значение по умолчанию – FALSE. Оператор RAISERROR WITH LOG (описывается в следующем разделе) изменяет это значение, если оно равно FALSE. Параметр replace (заменять) указывает, что данное сообщение должно заменять существующее сообщение, имеющее тот же номер идентификатора ( msg_id ).
Владельцы роли public имеют полномочия выполнения процедуры sp_addmessage, но чтобы создать сообщение с уровнем серьезности больше 18 или задать значение TRUE для параметра with_log, вы должны быть владельцем роли sysadmin.
Рассмотрим пример использования sp_addmessage. Следующий оператор создает новое сообщение, которое будет всегда протоколироваться в журнале событий (поскольку для параметра with_log задано значение TRUE ):
sp_addmessage 50001, 16, "Customer ID is out of range.", @with_log = "TRUE"
GO
Изменение параметров протоколирования
сообщения о событии
Предположим, что существующее сообщение, или сообщение, которое вы только что создали, не позволяет протоколировать его в журнале (или вы не включили параметр with_log ), как в следующем примере:
sp_addmessage 50001, 16, "Customer ID is out of range.", @with_log = "FALSE"
GO
Если в дальнейшем вам потребуется протоколировать это сообщение в журнале, вы должны изменить его статус протоколирования. Для этого используйте процедуру sp_altermessage, чтобы всегда происходило протоколирование в журнале, как в следующем примере:
sp_altermessage 50001, WITH_LOG, "TRUE"
GO
В качестве альтернативного средства вы можете использовать оператор RAISERROR с параметром WITH LOG, чтобы возвращать данное сообщение в ваше приложение, а также в журнал событий приложений и в журнал SQL Server. Например, следующий оператор отправляет в вашу программу сообщение 50001 с уровнем серьезности 16 и значением параметра состояния (state) 1, где state – это числовое значение, которое можно использовать для отслеживания, если сообщение передается более чем в одно местоположение:
RAISERROR (50001, 16, 1) WITH LOG
GO
Дополнительная информация.Для получения более подробной информации об использовании RAISERROR найдите "RAISERROR" в индексе Books Online и выберите "Using RAISERROR" в диалоговом окне Topics Found.
Чтобы изменить статус протоколирования сообщения вы можете также использовать расширенную хранимую процедуру xp_logevent, которая находится в базе данных master. При использовании этой процедуры сообщение передается в журнал событий и в журнал SQL Server, но не в клиентское приложение. Ниже приводится пример использования этой процедуры:
USE master
GO
xp_logevent 50002, "Customer ID out of range", warning
GO
Первые два параметра являются обязательными: это идентификационный номер определенного пользователем сообщения (который, как уже говорилось, должен быть больше 50000) и текст сообщения, которое будет передаваться в эти журналы. Третий параметр (уровень серьезности) не является обязательным. Он может быть представлен одной из трех текстовых строк: informational (информационное), warning (предупреждение) или error (ошибка). Значение уровня серьезности определяет, какой тип значка появится рядом с сообщением в окне Event Viewer, чтобы вы могли легко отличать предупреждения от ошибок. Для Windows 2000 информационное сообщение снабжено синим значком "i", предупреждение – желтым значком "!" и ошибка – красным значком "X". Если уровень серьезности не задан, то по умолчанию используется значение informational.
Создание оповещения
Теперь мы готовы создать оповещение по событию и по состоянию производительности. Для создания оповещения вы можете использовать Enterprise Manager, T-SQL или SQL-DMO. И здесь мы будем рассматривать только методы использования Enterprise Manager и T-SQL, поскольку SQL-DMO выходит за рамки материала этой книги.
Использование Enterprise Manager для создания оповещения по событию
В этом примере мы создадим оповещение по системному сообщению, которое уже имеет уровень серьезности 24. Это сообщение будет протоколироваться по умолчанию в журнале событий без какого-либо вмешательства пользователя, необходимого для изменения его статуса протоколирования. Чтобы создать оповещение по событию, выполните следующие шаги.
В левой панели Enterprise Manager раскройте папку сервера, раскройте папку Management (Управление) и затем раскройте папку SQL Server Agent. Щелкните правой кнопкой мыши на Alerts (Оповещения) и выберите из контекстного меню пункт New Alert (Создать оповещение). Появится окно New Alert Properties (Свойства нового оповещения) (рис. 31.17). Во вкладке General введите имя оповещения, которое может содержать до 128 символов. Для данного примера введите (рис 31.17) Вкладка General окна New Alert Properties
В секции Event alert definition (Определение оповещения по событию) окна New Alert Properties нужно задать событие, по которому будет запускаться данное оповещение, щелкнув на кнопке выбора Error number (Номер ошибки) или Severity (Уровень серьезности) и указав затем номер ошибки или уровень серьезности. Если задан уровень серьезности, то данное оповещение будет запускаться по всем ошибкам с этим уровнем серьезности. Для данного примера щелкните на кнопке выбора Error Number и затем щелкните на кнопке обзора Browse (...), чтобы выполнить поиск номера. Появится диалоговое окно Manage SQL Server Messages (Управление сообщениями SQL Server) (рис. 31.18).
Для поиска определенной ошибки, нужно выбрать соответствующую категорию в окне списка Severity вкладки Search (Поиск) и щелкнуть на кнопке Find (Найти). Найденные ошибки будут представлены в списке вкладки Messages (Сообщения). Два флажка внизу вкладки Search можно использовать для ограничения поиска. Флажок Only include logged messages (Включать только протоколируемые в журнале сообщения) позволяет выполнять поиск только тех сообщений, которые автоматически протоколируются в журнале событий. Флажок Only include user-defined messages (Включать только определенные пользователем сообщения) ограничивает поиск только теми сообщениями, которые определены пользователями. Для нашего примера мы хотим найти все фатальные ошибки оборудования, поэтому выделите в окне списка Severity ошибку 024 – Fatal Error: Hardware Error (Фатальная ошибка: Ошибка оборудования) и затем щелкните на кнопке Find. Во вкладке Messages (рис 31.19
(рис 31.19) Вкладка Search (Поиск) диалогового окна Manage SQL Server Messages(рис 31.18) Вкладка Messages (Сообщения) диалогового окна Manage SQL Server Messages
Щелкните на кнопке OK, чтобы подтвердить выбор этого сообщения и вернуться во вкладку General окна New Alert Properties. В раскрывающемся списке Database Name (Имя базы данных) вы можете задать, что оповещение будет запускаться, только если данное событие возникло в указанной базе данных. Оставьте значение по умолчанию All Databases (Все базы данных). В текстовом поле Error message contains this text (Сообщение об ошибке содержит следующий текст) вы можете ввести строку символов (до 100 символов), которая ограничивает круг ошибок, по которым будет запускаться данное оповещение, только теми ошибками, текст которых содержит данную строку. Если оставить это поле пустым, то никакого ограничения не применяется.
Щелкните на вкладке Response (Отклик) (рис. 31.20). В этой вкладке вы можете указать действие, которое следует предпринять, если возникнет это оповещение. Установите флажок Execute job (Выполнить задание) и выберите в раскрывающемся списке имя задания, которое будет выполнено в случае этого оповещения. Щелчок на кнопке New Operator (Создать оператора) позволяет вам создать нового оператора, который будет получать уведомление. В списке Operators to notify (Операторы для уведомления) будут представлены существующие операторы. Вы можете задать, нужно ли уведомлять оператора по электронной почте (колонка E-mail), через пейджер (pager), с помощью (рис 31.20) Вкладка Response (Отклик) окна New Alert PropertiesЕсли вы указываете какого-либо оператора для уведомления по электронной почте, а также устанавливаете флажок Include alert error text in E-mail (Включить текст ошибки оповещения в электронную почту), то текст ошибки будет отправлен оператору в сообщении оповещения. Чтобы включить в сообщение электронной почты дополнительный текст, введите его в текстовом поле Additional notification message to send (Дополнительное сообщение уведомления для отправки) внизу этой вкладки. В этом поле можно ввести до 512 символов. На рис. 31.20 показан оператор TestOperator, выбранный для уведомления по электронной почте. Включено также дополнительное сообщение.Отметим также поля-счетчики Delay between responses (Задержки между откликами). Они указывают, насколько часто будет извещаться оператор при повторных случаях этого оповещения. Значение 60 минут означает, что уведомление оператору будет отправляться только один раз в течение любого 60-минутного периода.
Для подтверждения введенных вами параметров оповещения и отклика щелкните на кнопке Apply. Затем щелкните на кнопке OK, чтобы закрыть это окно.
Использование Enterprise Manager для создания оповещения по состоянию производительности
Теперь мы используем Enterprise Manager для создания оповещения, которое будет запускаться при возникновении определенного состояния производительности. Отметим, что служба SQLServerAgent опрашивает счетчики производительности с 20-секундными интервалами, поэтому кратковременные пиковые или низкие нагрузки, возникающие между опросами, возможно, не будут обнаруживаться. Чтобы создать оповещение, выполните следующие шаги.
В левой панели Enterprise Manager раскройте папку сервера, раскройте папку Management и затем раскройте папку SQL Server Agent. Щелкните правой кнопкой мыши на Alerts и выберите из контекстного меню пункт New Alert. Появится окно New Alert Properties (рис. 31.21). Во вкладке General в текстовом поле Name введите имя оповещения. (Для данного примера используйте (рис 31.21) Вкладка General окна New Alert Properties
В секции Performance condition alert definition (Определение оповещения по состоянию производительности) нужно определить состояние производительности, по которому будет запускаться это оповещение. Выберите в раскрывающемся списке Object (Объект) объект производительности SQL Server, который хотите использовать для запуска оповещения, и затем выберите в раскрывающемся списке Counter (Счетчик) нужный счетчик. Используйте поле Alert if counter (Оповещение в случае, если счетчик), чтобы указать, в какой ситуации должно запускаться оповещение. И, наконец, задайте пороговое значение (поле Value), переход которого будет приводить к запуску этого оповещения. На рис. 31.21 показаны параметры, используемые для запуска оповещения, когда счетчик SQL Server User Connections превышает значение 100.
Чтобы завершить создание этого оповещения, задайте параметры на вкладке Response, как это описано на шаге 5 предыдущего раздела, щелкните на кнопке Apply и затем щелкните на кнопке OK.
Использование T-SQL для создания оповещения
по событию или по состоянию производительности
Вы можете также использовать для создания оповещений T-SQL, но не забывайте, что если вы создаете оповещения с помощью Enterprise Manager, то можете затем генерировать для этих оповещений сценарии T-SQL. (Для этого щелкните правой кнопкой мыши на Alerts в папке SQL Server Agent, укажите в контекстном меню пункт All Tasks и затем выберите оператор Generate SQL Script.) Вероятно, использование Enterprise Manager вам покажется более легким для создания оповещений, поскольку для метода T-SQL требуется знать и помнить много необязательных параметров вместе с их значениями по умолчанию. Чтобы добавить оповещение с помощью T-SQL, нужно использовать хранимую процедуру sp_add_alert. Эта процедура используется для создания оповещений как по событию, так и по состоянию производительности. Тип создаваемого оповещения указывается соответствующим параметром. Процедура sp_add_alert имеет следующий синтаксис:
sp_add_alert [@name =] 'name'
[, [@message_id =] message_id]
[, [@severity =] severity]
[, [@enabled =] enabled]
[, [@delay_between_responses =] delay_between_responses]
[, [@notification_message =] 'notification_message']
[, [@include_event_description_in =] include_event_description_in]
[, [@database_name =] 'database']
[, [@event_description_keyword =] 'event_description_keyword_pattern']
[, {[@job_id =] job_id | [@job_name =] 'job_name'}]
[, [@raise_snmp_trap =] raise_snmp_trap]
[, [@performance_condition =] 'performance_condition']
[, [@category_name =] 'category']
Для модификации оповещения, просмотра информации оповещения и удаления оповещения используются соответственно хранимые процедуры sp_update_alert, sp_help_alert и sp_delete_alert. Напомним, что все эти хранимые процедуры находятся в базе данных msdb.
Дополнительная информация. Для получения более подробной информации о процедурах, описанных в этом разделе, найдите эти процедуры в индексе Books Online.
Операторы
Операторы – это отдельные люди, которые могут получать уведомление от SQL Server по завершении какого-либо задания или при возникновении какого-либо события. Оператор – это человек, ответственный за обслуживание одной или нескольких систем, на которых работает SQL Server. Вы уже знаете, как определять сообщение уведомления, которое будет отправляться оператору. Как уже говорилось, имеется три метода, используемых для связи с операторами: отправка сообщений электронной почты, отправка на пейджер и использование команды NET SEND (которая отправляет сетевое сообщение на компьютер оператора.) Чтобы можно было применять каждый из этих методов, ваша система должна отвечать определенным требованиям. Для связи через электронную почту и с пейджером вы должны инсталлировать на сервере совместимый с MAPI-1 клиент ("MAPI" означает "Messaging API" – интерфейс прикладного программирования для сообщений), такой как Microsoft Outlook или Microsoft Exchange Client, и должны создать почтовый профиль для службы SQLServerAgent. Для пейджинговой связи вам нужно также инсталлировать на почтовом сервере программное обеспечение сторонних фирм для связи электронной почты с пейджером, которое обрабатывает входные сообщения электронной почты и преобразует их в пейджинговые сообщения. Чтобы использовать NET SEND, у вас должна работать операционная система Windows NT или Windows 2000, поскольку NET SEND не поддерживается в Microsoft Windows 95/98.
Дополнительная информация. Информацию по созданию почтовых профилей см. в документации своего клиентского программного обеспечения для электронной почты. Для получения информации по программному обеспечению для связи пейджер-электронная почта обратитесь к своему провайдеру пейджинговых услуг или к документации вашего пейджера.
Вы должны определить каждого оператора в SQL Server. Вы можете создать несколько операторов для разделения между ними обязанностей, а также резервного оператора, который получит уведомление, когда недоступны другие операторы (например, когда не проходит сообщение на пейджер). Вы можете создать оператора с помощью Enterprise Manager, T-SQL или SQL-DMO. Мы рассмотрим в этом разделе использование Enterprise Manager и T-SQL; метод SQL-DMO выходит за рамки материала этой книги.
Использование Enterprise Manager для создания оператора
Чтобы создать оператора с помощью Enterprise Manager, выполните следующие шаги.
В левой панели Enterprise Manager раскройте папку сервера, раскройте папку Management и затем раскройте папку SQL Server Agent. Щелкните правой кнопкой мыши на Operators и выберите из контекстного меню пункт New Operator, чтобы появилось окно New Operator Properties (Свойства нового оператора) (рис. 31.22). Во вкладке General введите имя нового оператора и затем заполните все или некоторые из следующих данных: адрес электронной почты этого оператора, адрес пейджера и адрес для команды (рис 31.22) Вкладка General окна New Operator Properties (Свойства нового оператора)Если вы ввели адрес пейджера, то можете задать в секции Pager on duty schedule (Расписание дежурства на пейджере) дни и периоды времени, когда можно отправлять сообщения этому оператору. Например, если у вас несколько операторов, то вы можете разделять между ними время работы, когда один оператор получает сообщения на пейджер в понедельник, среду и пятницу, а второй – во вторник, четверг и субботу.
Щелкните на вкладке Notifications. Если щелкнуть на кнопке выбора Alerts (в верхнем правом углу), то появится список существующих оповещений (рис 31.23(рис 31.23) Вкладка Notifications окна New Operator Properties со списком оповещений
При создании нового оператора кнопка выбора Jobs для вас недоступна, так как нет таких заданий, которые бы уведомляли нового оператора, поскольку новый оператор еще не создан. Чтобы новый оператор не получал уведомлений, сбросьте флажок Operator is available to receive notifications (Оператор доступен для получения уведомлений). Отключение этой возможности позволяет вам временно приостанавливать отправку уведомлений оператору, например, когда данный оператор в отпуске. Вы можете затем снова активизировать отправку уведомлений, повторно установив этот флажок, когда оператор вернется к работе.
Щелкните на кнопке Send E-mail (Отправить электронную почту), чтобы создать тестовое сообщение для отправки оператору, представленному во вкладке General. (Вы получите сообщение об ошибке, если не указали адрес электронной почты во вкладке General.) Затем вы можете отправить сообщение электронной почты, в котором описываются типы уведомлений, заданные для этого оператора. Внизу вкладки Notifications вы увидите информацию о последних попытках уведомлений этому оператору по типам используемых средств отправки.
Использование T-SQL для создания оператора
Команды T-SQL, используемые для создания оператора, модифицирования информации об операторе, просмотра информации об операторе и удаления оператора, – это соответствующие хранимые процедуры, находящиеся в базе данных msdb: sp_add_operator, sp_update_operator, sp_help_operator и sp_delete_operator. И здесь вы увидите, что вам легче использовать Enterprise Manager. Вы можете генерировать сценарии T-SQL после того, как создали оператора с помощью Enterprise Manager:
Ниже представлен синтаксис sp_add_operator:
sp_add_operator [@name =] 'name'
[, [@enabled =] enabled]
[, [@email_address =] 'email_address']
[, [@pager_address =] 'pager_address']
[, [@weekday_pager_start_time =] weekday_pager_start_time]
[, [@weekday_pager_end_time =] weekday_pager_end_time]
[, [@saturday_pager_start_time =] saturday_pager_start_time]
[, [@saturday_pager_end_time =] saturday_pager_end_time]
[, [@sunday_pager_start_time =] sunday_pager_start_time]
[, [@sunday_pager_end_time =] sunday_pager_end_time]
[, [@pager_days =] pager_days]
[, [@netsend_address =] 'netsend_address']
[, [@category_name =] 'category']
Дополнительная информация. Чтобы получить подробное описание параметров хранимых процедур, перечисленных в этом разделе, найдите имя соответствующей хранимой процедуры в индексе Books Online.
Журнал ошибок службы SQLServerAgent
Служба SQLServerAgent имеет собственный журнал ошибок, в который записываются запуск и отключение SQLServerAgent и любые предупреждения, ошибки и информационные сообщения, связанные с заданием или оповещением SQLServerAgent. Чтобы использовать журнал ошибок SQLServerAgent, выполните следующие шаги.
В Enterprise Manager раскройте папку сервера и раскройте папку Management. Щелкните правой кнопкой мыши на SQL Server Agent и выберите из контекстного меню пункт Display Error Log (Показать журнал ошибок). Появится журнал ошибок (рис 31.24(рис 31.24) Диалоговое окно SQL Server Agent Error Log
В раскрывающемся списке Type (Тип) вы может выбирать просмотр сообщений об ошибках, предупреждающих сообщений, информационных сообщений или все трех типов (All Types). На рис 31.25(рис 31.25) Диалоговое окно SQL Server Agent Error Log, где показаны все типы сообщений
Каждый раз, как вы запускаете SQLServerAgent, происходит повторный запуск журнала ошибок с перезаписью всех существующих сообщений этого журнала. Вы можете искать сообщение, содержащее определенную строку, набрав эту строку в текстовом поле Containing Text (Содержит текст) и нажав затем клавишу Enter или щелкнув на кнопке Apply Filter (Применить фильтр). На рис 31.26(рис 31.26) Результаты поиска определенной строки в сообщениях журнала ошибок
Дважды щелкните на самом сообщении, чтобы появилось диалоговое окно SQL Server Agent Error Log Message (Сообщение журнала ошибок SQL Server Agent) (рис. 31.27). Если в результате поиска будет показано несколько сообщений, то вы можете использовать для перехода между сообщениями кнопки Next (Следующее) и Previous (Предыдущее). Эти кнопки недоступны, если найдено только одно сообщение.В журнал ошибок SQLServerAgent поступает сообщение об ошибке, если по какой-либо причине недоступен оператор или не выполняется задание. Вам следует время от времени просматривать журнал ошибок, чтобы определить наличие ошибок, на которые нужно обратить внимание.
(рис 31.27) Диалоговое окно SQL Server Agent Error Log Message
Заключение
В этой лекции вы узнали, как использовать службу SQLServerAgent для автоматизации некоторых административных задач путем определения заданий и операторов, создания уведомлений для операторов, а также создания оповещений по событиям и состояниям производительности. Вы узнали о том, насколько важно использовать уровни серьезности ошибок при создании оповещений и как изменять статус протоколирования сообщения об ошибке, чтобы оно записывалось в журнал событий Windows NT или Windows 2000. И вы узнали, как просматривать файл журнала ошибок службы SQLServerAgent, в который записывается информация о SQLServerAgent, а также любые сообщения об ошибках и предупреждения, возникшие во время оповещений и заданий. В лекции 32 мы рассмотрим резервное копирование баз данных SQL Server.