События уровня 1 | События уровня 2 | События уровня 3 |
DDL_EVENTS | DDL_DATABASE_LEVEL_EVENTS | DDL_ASSEMBLY_EVENTS |
DDL_DATABASE_SECURITY_EVENTS | ||
DDL_DEFAULT_EVENTS | ||
DDL_EVENT_NOTIFICATION_EVENTS | ||
DDL_EXTENDED_PROPERTY_EVENTS | ||
DDL_FULLTEXT_CATALOG_EVENTS | ||
DDL_FULLTEXT_STOPLIST_EVENTS | ||
DDL_FUNCTION _EVENTS | ||
DDL_PRTITION_EVENTS | ||
DDL_PLAN_GUIDE_EVENTS | ||
DDL_PROCEDURE_EVENTS | ||
DDL_RULE_EVENTS | ||
DDL_SSB_EVENTS | ||
DDL_SYNONYM_EVENTS | ||
DDL_TABLE_VIEW_EVENTS | ||
DDL_TYPE_EVENTS | ||
RENAME | ||
ALTER_INSTANCE | ||
DDL_SERVER_LEVEL_EVENTS | DLL_DATABASE_EVENTS | |
DLL_ENDPOINTS_LEVEL | ||
DLL_EVENT_SESSION_EVENTS | ||
DLL_MESSAGE_EVENTS | ||
DLL_RESOURCE_GOVERNOR_LEVEL | ||
На втором уровне иерархии (табл. 13.4) осуществляется разделение на события уровня сервера (DDL_SERVER_LEVEL_EVENTS) и события уровня базы данных (DDL_DATABASE_LEVEL_EVENTS).
В рамках любого DDL-триггера доступна для применения встроенная функция EVENTDATA, с помощью которой можно получить исчерпывающую информацию о событии, активизировавшем триггер. Результатом работы функции является значение XML-типа.
DDL-триггеры уровня сервера. Триггеры уровня сервера предназначаются, прежде всего, для отслеживания настроек сервера, а также для обеспечения его безопасности. Условно триггеры уровня сервера можно разбить на две группы: триггеры для обработки событий, связанных с созданием, изменением или удалением объектов сервера, и триггеры, обрабатывающие событие подключения к серверу.
Для хранения результатов выполнения функции EVENTDATA создадим в системной БД MASTER таблицу с именем SERVER_EVENT_LOG (рис. 13.91).
Рис. 13.91. Таблица для хранения результатов выполнения
функции EVENTDATA
Второй столбец таблицы SERVER_EVENT_LOG (рис. 13.91) предназначен для хранения данных в формате XML. Более подробно о типе данных XML и принципах работы с ним поясняется в 14 главе этого пособия.
На рис. 13.92 приведен пример создания DLL-триггера с именем CREATE_DB уровня сервера (ALLSERVER), предназначенного для обработки события с именем CREATE_DATABASE. Событие CREATE_DATABASE находится на четвертом уровне иерархии (под DLL_DATABASE_EVENTS) и возникает при выполнении DLL-оператора CREATE DATABАSE, предназначенного для создания новой БД.
Рис. 13.92. Создание триггера уровня сервера для обработки события
CREATE_DATABASE
Триггер с именем DROP_DB (13.93) реагирует на выполнение оператора DROP DATABASE (удаление БД).
Рис. 13.93. Создание триггера уровня сервера для обработки события DROP_DATABASE
Триггеры CREATE_DB и DROP_DB (рис. 13.92, 13.93) содержат похожий код, выполнение которого приводит к выдаче сообщения в стандартный поток вывода (оператор PRINT) и добавлению строки (оператор INSERT) в таблицу SERVER_EVENT_LOG. В столбец с именем EP записывается результат выполнения функции EVENTDATA.
При выполнении операторов CREATE DATABASE и DROP DATABASE (рис. 13.94, 13.95) в результате выполнения триггеров в стандартный выходной поток выводятся соответствующие сообщения и добавляются строки в таблицу SERVER_EVENT_LOG (рис. 13.96).
Рис. 13.94. Сообщение, формируемое в результате выполнения триггера CREATE_ DB (рис. 13.92) при создании БД
Рис. 13.95. Сообщение, формируемое в результате выполнения триггера DROP_ DB (рис.13.92) при удалении БД
Рис. 13.96. Добавление двух строк в таблицу SERVER_ EVENT_ LOG
в результате выполнения триггеров CREATE_ DB и DROP_ DB
На рис. 13.97, 13.98 демонстрируется содержимое столбца c именем EP таблицы SERVER_EVENT_LOG. Значением столбца является XML-структура, сформированная функцией EVENTDATA при выполнении триггеров CREATE_DB и DROP_DB (рис. 13.92, 13.93).
Рис. 13.97. Результат выполнения функции EVENTDATA в триггере
CREATE_ DB (рис.13. 92) при выполнении оператора CREATE DATABASE
(рис. 13.94)
Рис. 13.98. Результат выполнения функции EVENTDATA в триггере
DROP_ DB (рис. 13.93) при выполнении оператора DROP DATABASE (рис. 13.95)
В табл. 13.5 приведено описание XML-элементов, составляющих результат выполнения функции EVENTDATA.
Таблица 13.4
Дата: 2019-02-25, просмотров: 242.