quinta-feira, 26 de agosto de 2010

DDL Trigger com escopo ALL SERVER

Em um artigo anterior, escrevi sobre as DDL Triggers e seu uso para registro de alterações na estrutura de bancos de dados SQL Server. Porém, esqueci de comentar que podemos desenvolver DDL Triggers utilizando o escopo ALL SERVER,  que nos permite capturar eventos de criação e exclusão de banco de dados, o que não é possível com uma DDL Trigger com escopo DATABASE.

Observe o código abaixo:

CREATE TRIGGER log_events

ON ALL SERVER

FOR CREATE_DATABASE, DROP_DATABASE

AS

DECLARE @data XML

SET @data = EVENTDATA()

INSERT INTO msdb.dbo.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

 

A Trigger acima foi criada dentro do MSDB, e os logs armazenados em uma tabela com a seguinte estrutura:

CREATE TABLE ddl_log (PostTime datetime,

      DB_User nvarchar(100),

      Event nvarchar(100),

      TSQL nvarchar(2000),

      hostname nvarchar(100));

GO

 

No exemplo acima, estão sendo capturados apenas os eventos de exclusão e criação de banco de dados. A lista completa de eventos que podem ser capturados no escopo ALL SERVER é:

ALTER_AUTHORIZATION_SERVER

CREATE_DATABASE

ALTER_DATABASE

DROP_DATABASE

CREATE_ENDPOINT

ALTER_ENDPOINT

DROP_ENDPOINT

CREATE_LOGIN

ALTER_LOGIN

DROP_LOGIN

GRANT_SERVER

DENY_SERVER

REVOKE_SERVER

 

Mais informações: MSDN.

Até a próxima!

 

Nenhum comentário:

Postar um comentário

Leave your comment here!