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

Обо мне

MVP

Data Architect at Intapp, Inc.

PASS Regional Mentor, CEE

MCT, MCITP, MCPD, MCTS


Microsoft MVP

Month List