quinta-feira, 10 de dezembro de 2009

Criando uma DDL Trigger

É possível rastrear as alterações DDL em um banco de dados SQL Server 2005 ou superior, através de DDL triggers. Um exemplo simples, seria:

CREATE TRIGGER seguranca
ON DATABASE
FOR CREATE_TABLE
AS
   
   RAISERROR ('Não é possível criar novas tabelas no banco de dados.', 16, 1)
   ROLLBACK


Porém podemos montar uma ambiente mais complexo, armazenando as alterações, qual usuário responsável e de onde partiram. Veja o exemplo abaixo:

--Criando a tabela DDL_LOG
CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000),hostname nvarchar(100));
GO

--Criando a trigger
CREATE TRIGGER log
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
DECLARE @data XML
SET @data = EVENTDATA()
INSERT ddl_log
   (PostTime, DB_User, Event, TSQL, HOSTNAME)
   VALUES
   (GETDATE(),
   CONVERT(nvarchar(100), CURRENT_USER),
   @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
   @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)'),
   host_name()) ;
GO

--Testando a trigger
CREATE TABLE TestTable (a int)
DROP TABLE TestTable ;
GO

--Listando as alterações armazenadas em ddl_log
SELECT * FROM ddl_log ;
GO

Nenhum comentário:

Postar um comentário

Leave your comment here!