ProgramlamaVeritabanı Geliştiricisi

Üretim SQL veritabanlarındaki değişikliklerin denetimi için nasıl log tabloları (log tables) uygulanır ve doğru bir şekilde kullanılır? Hangi tuzaklar vardır ve bunların performans üzerindeki etkisini nasıl en aza indirebiliriz?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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ı:

  1. Uygulama veya prosedür aracılığıyla açık kayıt.
  2. Herhangi bir değişikliği izlemek için tetikleyicilerin (triggers) kullanılması.
  3. Yeni veritabanı sistemlerinde — Change Data Capture (CDC) veya Temporal Tablolar gibi sistem mekanizmaları.

Tipik içerik:

  • audit_id (PK), TableName, OperationType (I/U/D), RecordID, OldValue, NewValue, ChangedBy, ChangeDT

Kod örneği (UPDATE için tetikleyici)

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:

  • Audit tablosunun büyük hacmi sorguları yavaşlatabilir.
  • Akıllı bölümlendirme/eski verilerin silinmesi gereklidir.
  • Kilitlenmeler ve değişikliklerin temizlenmesine dikkat edilmelidir.

Çeldirici soru.

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.

Konunun inceliklerini bilmemekten kaynaklanan gerçek hatalarla ilgili örnekler.


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.