SQL Server Log Files

Profosyonel projelerde oluşturulan veritabanları üzerinde hangi tabloda hangi kullanıcının hangi DML işlemlerini yaptığını bilmek, sistemin kullanışlığı açısından ve güvenlik açısından oldukça önemlidir. Bir işlem yapılırken hata ile karşılaşıldığında o hatanın kim tarafından yapıldığı, ne zaman yaptığı rahatça bulunabilir. Hata sonucu değişen verinin eski değerlerine döndürülmesi gerekebilir. Loglama veritabanımıza bir miktar yük getirse de, hayati bir önem taşıdığı için bu yük göz ardı edilebilir. Veritabanımızdaki table ‘larımıza ait birer tane de Log table olmalıdır. Table’da herhangi değişiklik yada hata olduğu zaman ilgili Log table’da eski halini saklayabilelim. Log table’da orjinal table’ın fieldları yanı sıra isteğe göre LogTarihi, LogUser(table ile kimin çalıştığı), LogType(nasıl bir dml yada ddl işlemi yapıldı),LogHostname gibi ekstra olarak da fieldlar eklenebilir. Hem orjinal hemde Logtable’ımızın şu şekildedir.

Orjinal Table

Capture

Log Table

CaptureLog

Loglamayı trigger yazarak sağladık. Orjinal table da herhangi bir değişiklik yapıldığında LogTable’a eski verinin yanı sıra , tarihi, kimin tarafından yapılıdığı, nasıl bir işlem olduğu (dml,ddl..),sunucu ismi gibi verileri kaydediyor.Biz bu tablomuzda update ve delete için loglama yaptık.


ALTER TRIGGER [dbo].[Trud_Ders]
 ON [dbo].[Ders]
 AFTER Delete,Update
AS
BEGIN
--update işleminde değişen veri olacağından eğer inserted tablosundan dönen değer
-- '0' dan büyük ise update işlemi diyebiliriz.
 if((select count(*) from inserted)>0) --update
 begin
 print 'update islemi gerceklesti'
 insert into Ders_Log(Ad, LogTarih, LogUser, LogType, LogHostName)
 select Ad, GETDATE(),SUSER_SNAME (),'U',HOST_NAME () from deleted
 end
 else --delete
 begin
 insert into Ders_Log(Ad, LogTarih, LogUser, LogType, LogHostName)
 select Ad, GETDATE(),SUSER_SNAME (),'D',HOST_NAME () from deleted
 print 'delete islemi gerceklesti'
 end

END

İyi çalışmalar…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir