Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Триггеры DDL могут быть использованы в административных задачах, таких как аудит и регулирование операций базы данных.




Триггеры DDL срабатывают только после выполнения соответствующих инструкций DDL языка Transact-SQL, выполняемых в текущей базе данных или на текущем сервере. Область действия триггера зависит от события.

Действие этих триггеров распространяется на все команды одного типа во всей базе данных или на всем сервере.

Например, предотвратить внесение определенных изменений в схему базы данных, выполнить в базе данных некоторые действия в ответ на изменения в схеме базы данных, записывать изменения или события схемы базы данных.

 

Для триггеров DDL и DML для одной инструкции Transact-SQL можно создать несколько триггеров.

Пример: триггер DDL может быть использован для предотвращения изменения или удаления любой таблицы базы данных.

CREATE TRIGGER safety

ON DATABASE

FOR DROP_TABLE, ALTER_TABLE

AS

PRINT 'You must disable Trigger "safety" to drop or alter tables!'

ROLLBACK;

Триггеры DML создаются для инструкций INSERT, UPDATE и DELETE, чтобы обеспечить соблюдение бизнес-правил и целостность данных таблиц или представлений при их изменении.

DML-триггеры удобно использовать в следующих случаях:

· Для каскадных изменений в связанных таблицах базы данных.

· Для предотвращения случайных или неправильных операций INSERT, UPDATE и DELETE и реализации других более сложных ограничений, чем те, которые определены при помощи ограничения CHECK.
В отличие от ограничений CHECK, DML-триггеры могут ссылаться на столбцы других таблиц.

Например,

· триггер может использовать инструкцию SELECT для сравнения вставленных или обновленных данных и выполнения других действий, например изменения данных или отображения пользовательского сообщения об ошибке.

· Чтобы оценить состояние таблицы до и после изменения данных и предпринять действия на основе этого различия.

· Несколько DML-триггеров одинакового типа (INSERT, UPDATE или DELETE) для таблицы позволяют предпринять несколько различных действий в ответ на одну инструкцию изменения данных.

 

Как и триггеры DML, триггеры DDL могут выполнять управляемый код, упакованный в сборку, созданную в среде Microsoft.NET Framework и переданную на SQL Server.

 

Триггеры оказывают влияние на производительность: перед выполнением каждой команды по изменению состояния базы данных СУБД должна проверить триггерное условие с целью выяснения необходимости запуска триггера для этой команды. Выполнение подобных вычислений сказывается на общей производительности СУБД, а в моменты пиковой нагрузки ее снижение может стать особенно заметным. Очевидно, что при возрастании количества триггеров увеличиваются и накладные расходы, связанные с такими операциями.

Неправильно написанные триггеры могут привести к серьезным проблемам, таким, например, как появление "мертвых" блокировок. Триггеры способны длительное время блокировать множество ресурсов, поэтому следует обратить особое внимание на сведение к минимуму конфликтов доступа.

 

Кроме того, триггер DDL и инструкция, приводящая к его срабатыванию, выполняются в одной транзакции. В триггере можно выполнить откат этой транзакции. Серьезные ошибки могут приводить к автоматическому откату целой транзакции. Срабатывание триггера DDL, выполняемого в пакете и явно включающего инструкцию ROLLBACK TRANSACTION, приводит к отмене целого пакета.

 

Чтобы создать, изменить или удалить триггеры DML и триггеры DDL, используется похожий синтаксис Transact-SQL, к тому же они имеют и другие похожие характеристики.

 

Триггеры DDL создаются при помощи инструкции Transact-SQL CREATE TRIGGER для триггеров DDL (Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE STATISTICS оператор).

CREATE TRIGGER trigger_name

ON { ALL SERVER | DATABASE }

[ WITH <ddl_trigger_option> [, ...n ] ]

{ FOR | AFTER } { event_type | event_group } [,... n ]

AS { sql_statement [; ] [,... n ] | EXTERNAL NAME < method specifier > [; ] }

 

<ddl_trigger_option>::=

[ ENCRYPTION ]

[ EXECUTE AS Clause ]

 

<method_specifier>::=

assembly_name. class_name. method_name

Триггеры DML создаются при помощи инструкции Transact-SQL CREATE TRIGGER для триггеров DML ( Trigger on an INSERT, UPDATE, or DELETE оператор для таблицы или представления).

CREATE TRIGGER [ schema_name. ] trigger_name

ON { table | view }

[ WITH <dml_trigger_option> [,...n ] ]

{ FOR | AFTER | INSTEAD OF }

{ [ INSERT ] [, ] [ UPDATE ] [, ] [ DELETE ] }

[ NOT FOR REPLICATION ]

AS { sql_statement [; ] [,...n ] | EXTERNAL NAME <method specifier [; ] > }

 

<dml_trigger_option>::=

[ ENCRYPTION ]

[ EXECUTE AS Clause ]

 

<method_specifier>::=

assembly_name. class_name. method_name

 

Аргументы:

schema_name - имя схемы, которой принадлежит триггер DML. Триггеры DML ограничены областью схемы таблицы или представления, для которых они созданы. Аргумент schema_name не может быть указан для триггеров DDL или входа.

Примечание: Триггеры входа могут срабатывать в ответ на событие LOGON, возникающее при установке пользовательских сеансов.

trigger_name - имя триггера. Не может начинаться с символов # или ##.

table | view - таблица или представление, в которых выполняется триггер DML, иногда указывается как таблица триггера или представление триггера. На представление может ссылаться только триггер INSTEAD OF. Триггеры DML не могут быть описаны в локальной или глобальной временных таблицах.

DATABASE - применяет область действия триггера DDL к текущей базе данных.

ALL SERVER - применяет область действия триггера DDL или триггера входа к текущему серверу

WITH ENCRYPTION – шифрует текст инструкции CREATE TRIGGER.

EXECUTE AS - указывает контекст безопасности, в котором выполняется триггер. Позволяет управлять учетной записью пользователя, используемой экземпляром SQL Server для проверки разрешений на любые объекты базы данных, ссылаемые триггером.

FOR | AFTER - тип AFTER указывает, что триггер срабатывает только после успешного выполнения всех операций в инструкции SQL, запускаемой триггером. Все каскадные действия и проверки ограничений, на которые имеется ссылка, должны быть успешно завершены, прежде чем триггер сработает.

Если единственным заданным ключевым словом является FOR, аргумент AFTER используется по умолчанию.

Триггеры AFTER не могут быть определены на представлениях.

INSTEAD OF - указывает, что триггер DML срабатывает вместо инструкции SQL, используемой триггером, переопределяя таким образом действия выполняемой инструкции триггера. Аргумент INSTEAD OF не может быть указан для триггеров DDL или триггеров входа.

 

Триггеры INSTEAD OF не разрешены для обновляемых представлений, использующих параметр WITH CHECK OPTION. Пользователь должен удалить этот параметр при помощи инструкции ALTER VIEW перед определением триггера INSTEAD OF.

 

{ [ DELETE ] [, ] [ INSERT ] [, ] [ UPDATE ] } - определяет инструкции изменения данных, по которым срабатывает триггер DML, если он применяется к таблице или представлению. Необходимо указать как минимум одну инструкцию. В определении триггера разрешены любые их сочетания в любом порядке.

event_type - имя события языка Transact-SQL, которое после выполнения вызывает срабатывание триггера DDL (например, CREATE_PROCEDURE, см. список событий в разделе DDL-события документации).

event_group - имя стандартной группы событий языка Transact-SQL. Триггер DDL срабатывает после возникновения любого события языка Transact-SQL, принадлежащего к группе event_group (см. список группы событий в разделе Группы событий документации).

NOT FOR REPLICATION - указывает, что триггер не может быть выполнен, если агент репликации изменяет таблицу, используемую триггером.

sql_statement - у словия и действия триггера. Условия триггера указывают дополнительные критерии, определяющие, какие события — DML, DDL или событие входа — вызывают срабатывание триггера.

Действия триггера, указанные в инструкциях языка Transact-SQL, вступают в силу после попытки использования операции.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...