Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Microsoft SQL Server 2005 для администраторов
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

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;

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 
© 2004-2008, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru