Veritabanı objelerinin değişiklik tarihçesini tutmak için DDL oluşturmak


Warning: count(): Parameter must be an array or an object that implements Countable in /home/kazimce1/public_html/wp-content/plugins/microkids-related-posts/microkids-related-posts.php on line 645

DDL
Yaygın bir soru olan, veritabanı objeleri üzerinde yapılan değişikleri nasıl takip edeceğim? sorusunu düşünüyorsanız yada

Oluşturduğum tabloyu kim drop etti?
Kim benim oluşturduğum view’i değiştirdi?
Yazdığım store procedure/function üzerinde kim değişiklik yaptı?

Sorularına çözüm arıyorsanız. Çözüm olarak veri tabanı üzerindeki değişiklikleri takip etmek için Create, Update, Drop işlemleri için trigger yazarak DDL (Data Definition Language) oluşturabilirsiniz.

--======================== Değişiklikleri tutacak tablo =======================

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 CONSTRAINT [DF_EventsLog_EventDate] DEFAULT (getdate()),
[LoginName] [varchar](256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]

go
--============= Değişiklikleri ChangeLog tablosuna ekleyecek trigger ===========
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
DECLARE @client_ip VARCHAR(15)
set @data = EVENTDATA()

SELECT @client_ip = client_net_address
FROM sys.dm_exec_connections
WHERE session_id =@data.value('(/EVENT_INSTANCE/SPID)[1]', 'varchar(256)')

insert into YOURDATABASE.dbo.changelog(databasename, eventtype,
objectname, objecttype, sqlcommand, loginname)
values(
@data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)'),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)'),
@data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'varchar(256)') +'.'+
@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)')+'('+@client_ip+')'
)

Kaynak ;

Create DDL changes log
Designing DDL Triggers

0 thoughts on “Veritabanı objelerinin değişiklik tarihçesini tutmak için DDL oluşturmak”

Bir cevap yazın