|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
11.2.4. Применение триггеров DDLТриггеры DDL в SQL Server 2005, CREATE TRIGGER, DISABLE TRIGGER, DROP TRIGGER Все средства, которые были рассмотрены ранее, — Activity Monitor, системные хранимые процедуры, профилировщик — подразумевают, что администратор должен сидеть перед монитором и просматривать информацию, которую они возвращают. Однако очень часто у администратора есть другие дела, которыми он должен заниматься, и непрерывно осуществлять мониторинг работы сервера он не может. В этой ситуации было бы очень удобным применение средства, которое оповещало бы администратора о выполнении на сервере определенных действий. Первое средство, которое может использоваться для непрерывного мониторинга сервера и уведомления администратора, — триггеры DDL. Это новая возможность сервера SQL Server 2005. В предыдущих версиях SQL Server триггеров DDL не было. DDL расшифровывается как Data Definition Language (Язык определения данных). Фактически это поднабор команд Transact-SQL, используемых для создания, изменения и удаления объектов в базе данных. Соответственно, при помощи триггеров DDL можно отслеживать выполнение различных операций, которые производятся с объектами базы данных, например, удаление таблицы, создание нового индекса, изменение определения хранимой процедуры и т. п. Триггеры DDL обычно используются для мониторинга операций пользователей и для уведомления администратора о важных событиях, связанных с выполнением команд DDL. Кроме триггеров DDL, для мониторинга можно использовать и обычные триггеры. Они срабатывают при изменении данных в таблице (вставке новой записи, изменении или удалении существующей). Если у вас есть какая-то таблица особой важности, и администратор должен немедленно уведомляться о всех вносимых в нее изменениях, то вы вполне можете настроить триггеры на эту таблицу и поместить в них, например, команды на отправку сообщения по электронной почте средствами Database Mail. Однако применение обычных триггеров относится скорее к вопросам разработки баз данных, чем к администрированию, и поэтому здесь не рассматривается. Триггеры DDL создаются для определенной команды Transact-SQL. При этом набор команд, для которых можно определить триггеры DDL, очень большой. Вот лишь некоторые из этих команд: q CREATE DATABASE, ALTER DATABASE, DROP DATABASE; q CREATE LOGIN, ALTER LOGIN, DROP LOGIN; q CREATE USER, ALTER USER, DROP USER; q CREATE TABLE, ALTER TABLE, DROP TABLE; q CREATE VIEW, ALTER VIEW, DROP VIEW; q CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE и т. п. Обратите внимание, что когда вы указываете конкретную команду при создании триггера, между частями команды должен ставиться знак подчеркивания, например, DROP_TABLE. В самом простом варианте триггер DDL может выглядеть так: CREATE TRIGGER DDLTrigger1 ON DATABASE FOR DROP_TABLE AS PRINT 'Таблица была удалена'; Если выполнить эту команду в текущей базе данных, то при любом удалении таблицы в этой базе будет выдано сообщение 'Таблица была удалена'. Конечно, в реальной работе вы будете использовать более функциональные триггеры, например, триггеры, отправляющие уведомления по электронной почте при помощи хранимых процедур Database Mail. Во многих случаях вам потребуется получить в триггере более подробную информацию о сути происходящих событий (например, чтобы отправить эту информацию по электронной почте). Для этого удобнее всего использовать специальную функцию EVENTDATA(). Например, чтобы получить информацию о конкретном запросе (с именем таблицы), который произвел ее удаление, можно использовать код вида: CREATE TRIGGER DDLTrigger1 ON DATABASE FOR DROP_TABLE AS SELECT EVENTDATA().value( '(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)'); Триггеры считаются частью транзакции, которая их вызвала, поэтому в триггеры можно помещать команды на откат транзакций. Например, при помощи такого триггера можно вообще запретить удалять таблицы в данной базе данных: CREATE TRIGGER DDLTrigger1 ON DATABASE FOR DROP_TABLE AS PRINT 'Удалять таблицы в этой базе данных запрещено!'; ROLLBACK; Если триггер DDL нужно на время отключить, можно воспользоваться командой DISABLE TRIGGER, например: DISABLE TRIGGER DDLTrigger1 ON DATABASE; Удаление триггера DDL производится похожей командой: DROP TRIGGER DDLTrigger1 ON DATABASE;
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||