Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли создать триггер в MSSQL на DDL операции?  [new]
clauss
Member

Откуда:
Сообщений: 103
Здравствуйте, уважаемые админы!
Подсакжите, пожалуйста, как можно отследить выполнение любых DDL операций в MSSQL?

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

CREATE OR REPLACE TRIGGER ddl_trigger
AFTER DDL
ON DATABASE
... 

Есть ли какой-то аналог такого триггера или чего-нибудь в MSSQL? Предваряю ваш вопрос - мне это надо как админу БД разработчиков - знать кому надавать по шее за удаленную или добавленую колонку в таблице и соответственно доб. или удаленную таблицу )

Жду ваших комментариев)
20 авг 09, 15:39    [7562532]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать триггер в MSSQL на DDL операции?  [new]
clauss
Member

Откуда:
Сообщений: 103
И еще у меня MSSQL 2005
Модератор: Тема перенесена из форума "Oracle".


Сообщение было отредактировано: 20 авг 09, 15:44
20 авг 09, 15:40    [7562538]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать триггер в MSSQL на DDL операции?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Жду ваших комментариев)


Можно: http://msdn.microsoft.com/en-us/library/ms190989.aspx
20 авг 09, 15:51    [7562621]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать триггер в MSSQL на DDL операции?  [new]
aklerk
Member

Откуда:
Сообщений: 66
Группы событий триггеров DDL:
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ru/udb9/html/fb2a7bd0-2347-488c-bb75-734098050c7c.htm
а с синтаксисом, думаю, разберетесь!
20 авг 09, 15:55    [7562648]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать триггер в MSSQL на DDL операции?  [new]
clauss
Member

Откуда:
Сообщений: 103
Извините, за беспокойство - уже написала нужный триггер )
если кто заинтересовался, то вот он:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER ddl_trigger 
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @data XML; 
    DECLARE @schema sysname; 
    DECLARE @object sysname; 
    DECLARE @eventType sysname; 

    SET @data = EVENTDATA(); 
    SET @eventType = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'sysname'); 
    SET @schema = @data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname'); 
    SET @object = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname') 

    IF @object IS NOT NULL 
        PRINT '  ' + @eventType + ' - ' + @schema + '.' + @object; 
    ELSE 
        PRINT '  ' + @eventType + ' - ' + @schema; 

    IF @eventType IS NULL 
        PRINT CONVERT(nvarchar(max), @data); 

    INSERT [dbo].[DatabaseLog] 
        ( 
        [PostTime], 
        [DatabaseUser], 
        [Event], 
        [Schema], 
        [Object], 
        [TSQL], 
        [XmlEvent] 
        ) 
    VALUES 
        ( 
        GETDATE(), 
        CONVERT(sysname, CURRENT_USER), 
        @eventType, 
        CONVERT(sysname, @schema), 
        CONVERT(sysname, @object), 
        @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)'), 
        @data 
        ); 
END
GO

Таблицу DatabaseLog можно глянуть в БД AdventureWorks (MSSQL2008)
20 авг 09, 18:25    [7563701]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать триггер в MSSQL на DDL операции?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а принты зачем ??????
Где вы из смотреть то собрались???
-------------------------------------
Jedem Das Seine
20 авг 09, 18:32    [7563738]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать триггер в MSSQL на DDL операции?  [new]
clauss
Member

Откуда:
Сообщений: 103
Maxx,

Нигде я их использовать не буду ) - это пример триггера.
Я на его основе сделала свой.
Этот пример есть в AdventureWorks (MSSQL2008).
21 авг 09, 13:09    [7566471]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить