Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiNovye.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.92 Mб
Скачать

Протоколирование сообщений в журнале событий

Прежде чем перейти к созданию предупреждения для какого-либо события, рассмотрим типы событий, которые приводят к передаче сообщений в журнал событий приложений Windows; только эти события можно использовать для создания предупреждений. События (или ошибки) с уровнем серьезности (severity level) от 19 до 25 автоматически передаются в журнал событий приложений Windows и поэтому могут использоваться для запуска предупреждений. По умолчанию события с уровнем серьезности меньше 19 не протоколируются в журнале, и поэтому эти события не могут использоваться для запуска предупреждений. Чтобы эти события протоколировались в журнале, следует использовать sp_altermessage, оператор RAISERROR WITH LOG или xp_logevent, позволяющие изменить статус протоколирования события или сообщения.

Вся информация для системных и определённых пользователем сообщений сохраняется в таблице sysmessages базы данных master. Для создания определённого пользователем сообщения используется системная хранимая процедура 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. Значение по умолчанию – 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

Изменить статус протоколирования сообщения можно с помощью расширенной хранимой процедуры xp_logevent, хранящейся в базе данных master. При использовании этой процедуры сообщение передаётся в журнал событий и в журнал SQL Server, но не в клиентское приложение. Ниже приводится пример использования этой процедуры:

USE master

GO

xp_logevent 50002, "Customer ID out of range", warning

GO

Первые два параметра являются обязательными: это идентификационный номер определённого пользователем сообщения (который, как уже говорилось, должен быть больше 50000) и текст сообщения, которое будет передаваться в эти журналы. Третий параметр (уровень серьезности) не является обязательным. Он может быть представлен одной из трёх текстовых строк: informational (информационное), warning (предупреждение) или error (ошибка). Значение уровня серьезности определяет, какой тип значка появится рядом с сообщением в окне Event Viewe. Информационное сообщение снабжено синим значком «i», предупреждение – желтым значком «!» и ошибка – красным значком «X». Если уровень серьезности не задан, то по умолчанию используется значение informational.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]