Değişiklik log tabloları (log/audit tables), üretim tablolarındaki veri değişikliklerini kaydeden sıradan tablolardır: kim, ne zaman ve neyi değiştirdi. Finans sektöründe, e-ticaret, kamu kurumları için geçerli.
Uygulama yaklaşımları:
Tipik içerik:
CREATE TABLE ProductAudit ( AuditID int IDENTITY(1,1) PRIMARY KEY, ProductID int, OldPrice money, NewPrice money, ChangedBy sysname, ChangeDT datetime, OperationType char(1) ); GO CREATE TRIGGER trg_ProductAudit ON Products AFTER UPDATE AS BEGIN INSERT INTO ProductAudit(ProductID, OldPrice, NewPrice, ChangedBy, ChangeDT, OperationType) SELECT d.ProductID, d.Price, i.Price, SYSTEM_USER, GETDATE(), 'U' FROM inserted i JOIN deleted d ON i.ProductID = d.ProductID WHERE i.Price <> d.Price; END
Tuzaklar:
S: Log tablosuna eklenen kayıt, ana işlemin geri alınması durumunda otomatik olarak iptal edilir mi?
C: Eğer tetikleyici işlemin bir parçasıysa, evet, log'a ekleme ana işlemle birlikte geri alınır. Ancak uygulama/separate transaction seviyesinde loglama yapılırsa, tutarlılık olmayabilir.
Hikaye
Bir kredi kurumunda audit tablosunu temizleme mekanizması uygulanmamıştı. Hacim yüz milyonlarca satırı aştı, bu da uzun yedeklemelere, alan eksikliğine ve veritabanının genel performansında bozulmaya yol açtı.
Hikaye
Geliştirici, bir işlem dışında ayrı bir bağlantı aracılığıyla denetim yapıyordu. Sonuç olarak, aslında var olmayan olaylarla ilgili kayıtlar ortaya çıktı (uygulama mantığı işlemi geri alındı, ancak log kaydı geri alınmadı).
Hikaye
Değişiklik logunun tasarımında, tüm alanlara NVARCHAR(MAX) tipi verildi. Bu gereksizdi, sadece depolama ve indeksleme konusunda aşırı yük oluşturdu — veriler verimli bir şekilde analiz edilemiyordu.