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!