SQL Server: миф дня (4/30) – DDL триггеры являются INSTEAD OF триггерами

Миф №4 – DDL триггеры (появились в SQL Server 2005) являются INSTEAD OF триггерами

FALSE

        DDL триггеры в SQL Server реализованы как AFTER триггеры. Это означает то, что возникающие операции перехватываются DDL триггером (и опционально откатываются, если вы включили инструкцию ROLLBACK в тело триггера).

        А это значит, что они не такие легковесные, как можно подумать. Представьте себе такую операцию:

ALTER TABLE MyBigTable ADD MyNewNonNullColumn VARCHAR (20) DEFAULT 'Paul';
        В этом случае, если DDL триггер навешен на событие ALTER_TABLE, или что-нибудь более специфическое, вроде DDL_TABLE_EVENTS, мы получим следующее: каждая строка таблицы будет расширена, чтобы принять в себя новую колонку (так как она имеет не нулловое значение по умолчанию), и только после этого сработает триггер и ваша операция откатится. Согласитесь, это не есть хорошо (попробуйте сами и посмотрите лог при помощи fn_dblog – вы увидите откат операции).
 
        В этом случае будет лучше явно выдавать разрешения на ALTER операции, или создавать хранимые процедуры, при помощи которых выполнять только заранее определённые DLL операции.
       
        В любом случае, DDL триггеры позволяют эффективно реализовать откат операции, но довольно дорогой ценой. К тому же, они позволяют реализовать аудит действий, происходящих на сервере.Так что, я не говорю: "Не используйте", – просто будьте осторожны.
 
        У Kimberly Tripp есть потрясающий пост на тему DDL триггеров - "EXECUTE AS" and an important update your DDL Triggers (for auditing or prevention).

Об авторе:

Пол С. Рэндал (Paul S. Randal) — генеральный директор SQLskills.com является MVP по SQL Server. Он работал в группе подсистемы хранилища SQL Server в корпорации Майкрософт с 1999 по 2007 г. Пол является автором DBCC CHECKDB/восстановления SQL Server 2005 и в ходе разработки SQL Server 2008 отвечал за программу базовой подсистемы хранилища. Пол является специалистом по аварийному восстановлению, высокой доступности и обслуживанию базы данных и часто дает презентации на различных конференциях по всему миру. Он ведет блог по адресу SQLskills.com/blogs/paul.

Ссылки по теме:

- Оригинал статьи

- "EXECUTE AS" and an important update your DDL Triggers (for auditing or prevention)

- Триггеры DDL

blog comments powered by Disqus

Uneta Plus


TechEd Russi 2011

Обо мне

MVP

Head of Web Development department at DCT

Trainer at Microsoft Innovation Center

MCT, MCITP, MCPD, MCTS


Microsoft MVP

Month List