MS SQL Server da Table ve SP deişikliklerinin DDL Triggerlar ile kayıt altına alınması

Aşağıdaki kod ile vertabanı üzerinde CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE, CREATE_TABLE komutları ile yapılan işlemleri kayıt altına alabilirsiniz.

Bu işlem için öncelikle ilgili veritabanında ChangeLog isminde bir tablo oluşturulur ve ardından yukarıda saydığımız komutları içerek SQL komutları bu tabloda birikmeye başlar.

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[ChangeLog](
	[LogId] [int] IDENTITY(1,1) NOT NULL,
	[DatabaseName] [varchar](256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[EventType] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[ObjectName] [varchar](256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[ObjectType] [varchar](25) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[SqlCommand] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[EventDate] [datetime] NOT NULL,
	[LoginName] [varchar](256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[AllData] 1 NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING ON
GO

ALTER TABLE [dbo].[ChangeLog] ADD  CONSTRAINT [DF_EventsLog_EventDate]  DEFAULT (getdate()) FOR [EventDate]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [backup_objects] ON DATABASE
    FOR CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE, CREATE_TABLE,
        ALTER_TABLE, DROP_TABLE, CREATE_FUNCTION, ALTER_FUNCTION,
        DROP_FUNCTION
AS
    SET nocount ON

    DECLARE @data XML
    SET @data = EVENTDATA()

    INSERT  INTO dbo.changelog
            (
              databasename,
              eventtype,
              objectname,
              objecttype,
              sqlcommand,
              loginname,
              AllData
            )
    VALUES  (
              @data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)'),
              @data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)'),
              @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)'),
              @data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)'),
              @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)'),
              @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)'),
              @data
            )


GO

SET ANSI_NULLS OFF
GO

SET QUOTED_IDENTIFIER OFF
GO

DISABLE TRIGGER [backup_objects] ON DATABASE
GO

ENABLE TRIGGER [backup_objects] ON DATABASE
GO

Comments

comments

Leave a Comment.