9

Uzun bir süre boyunca, geçmişin kaybolmadığı bir vaka yönetim sistemi oluşturmak istedik. Bir değişiklik yapıldığında, bu değişikliği kaydetmek istiyoruz, ancak zaman içinde herhangi bir noktaya geri dönme ve kaydın nasıl göründüğünü görebiliyoruz. Bunu yapmanın bazı yolları olduğunu görmek için bu soruyu Yığın Taşımı topluluğuna vermek istedim, bunu başarmak için hali hazırda teknoloji var mı?Veri Geçmişini SQL Server 2008 Veritabanında Koruma Yolları

cevap

3

değilim emin nasıl Marc_s gibi zamansal bir veritabanı çalışmalarını belirtilen, ancak daha sonra SQL Server 2008 veya kullanıyorsanız, onun yerleşik Değişim Veri Toplama (CDC) işlevselliği yararlanabilirsiniz:

uçlar, güncelleştirme depolamak için çoğaltma işlem günlüğü kullanır ve bir için siler tabloyu ve verilen bir tarih/saate göre satırları almanıza veya yalnızca değişiklikleri almanıza izin veren tablo değerli işlevler oluşturur.

Ancak, işlem günlüğünüzün beklenmedik şekilde büyük ve yavaş olacağı için CDC'ye tek başına güvenemezsiniz. Ne yapmak geçerli:

  • CDC etkinleştirmek
  • orijinal tablo olarak aynı şemayı kullanan bir geçmiş tablo oluşturmak, ancak bir ilişkisel bir slowly-changing dimension gibi çok (satır sürüm bilgilerini depolamak için bir kaç tane daha sütun ekleme OLAP veritabanı) ve
  • sonra

sonra katılmadan, Sorgularınızdaki geçmiş tabloyu kullanabilirsiniz geçmişi masaya onları iter son yük beri değişiklikler için olacak periyodik anketler CDC fonksiyonlarını ve bir iş yaratmak normalde yaptığınız gibi İstediğiniz tarihte "olduğu gibi" kaydını almak için ek bir yüklem (ler).

+1

Bu, tetikleyicinin bahsettiğiniz aynı tarih tablosunu doldurmak için yapabileceği bir çok ek katmana benziyor. – Chris

+0

Bu doğrudur; Bununla birlikte, sütun sayısına bağlı olarak, çok fazla tetikleyici de gerekebilir. Her iki yol da programlı olarak yazılabilir, bu yüzden karmaşıklık çok fazla sorun içermemelidir. Her iki yöntemin de artıları ve eksileri vardır ve hangi yolun doğru olduğu sizin gereksinimlerinize bağlıdır. İşte iyi bir tartışma: http: // sqlserverplanet.com/design/triggers-service-broker-cdc-or-change-tracking/ – utexaspunk

+0

Ayrı tabloları kullanıyorum + Kayıt geçmişini ve diğer kayıtların ne zaman ve kimin kaydedildiğini kaydetmek için diğer iki tabloyu yönetmek için Tetikleyiciler. Tetikleyicilere +1! – Achilles