Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5820 / 381 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00

Лекция 31: Автоматизация административных задач

Оповещения

Оповещение – это действие, которое возникает на сервере в ответ на событие или состояние производительности. Оповещения могут реализоваться как уведомления операторам, могут инициировать запуск указанных заданий и могут перенаправлять события другому серверу. Событие – это ошибка или сообщение, которые записываются в журнал событий приложений 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 описывается см. "Разрешение наиболее распространенных проблем производительности" .)

Примечание. Для запуска оповещений требуется, чтобы работала служба 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 выходит за рамки материала этой книги.