Sql Server Change Data Capture'ı sık sık değişen bir şema ile kullanma


10

Sql Server Change Data Capture'ı, oluşturduğumuz yeni bir alt sistem için etkinleştirmeyi amaçlıyoruz.

Aslında buna ihtiyacımız olmadığı için değil, tam bir geçmiş izlenebilirliğine sahip olmak için zorlanıyoruz ve CDC bu gereksinimi parçalarımızdaki minimum çaba ile güzel bir şekilde çözecektir.

Çevik bir geliştirme sürecini takip ediyoruz, bu durumda veritabanı şemasında sık sık değişiklik yaptığımız anlamına gelir, örneğin yeni sütunlar ekleme, verileri diğer sütunlara taşıma vb.

Bir tablo oluşturduğumuz, bu tablo için CDC'yi etkinleştirdiğimiz ve daha sonra tabloya yeni bir sütun eklediğimiz küçük bir test yaptık. Yeni sütundaki değişiklikler CDC tablosuna kaydedilmez.

CDC tablosunu yeni şemaya güncelleştirmek için bir mekanizma var mı ve veritabanı şemasını taşırken yakalanan verilerle nasıl başa çıkacağınıza ilişkin en iyi uygulamalar var mı?


Bu soruyu dba.stackexchange.com'da yayınladıysanız daha iyi / daha hızlı bir yanıt alabilirsiniz
TimG

2
@TimG Bir soruyu çoğaltmak önerilmez, taşıma bir seçenek olabilir - ancak bir ödül vardır ve ödül etkinken taşınamaz. Bununla birlikte, soru ve ödülü dba.SE sohbet odasında belirtildi ve biraz dikkat çekti.

Yanıtlar:


5

Ayrıca yakın zamanda CDC'ye bakmaya başladık. Bu konuda uzman değilim, ancak sorularınız için bazı cevaplarım olduğunu düşünüyorum.

Çoğunlukla, CDC tamamen izlenebilir bir tarih hedefinize ulaşmanıza yardımcı olacaktır , ancak bunun sizi oraya götüreceğini sanmıyorum.

İlki:

sık sık veritabanı şemasında değişiklik yapıyoruz ... CDC tablosunu yeni şemaya güncellemek için bir mekanizma var mı

Sanırım CDC sizi başarısızlığa uğratacak. MSDN belgelerine sizin için şema değişiklikleri izlemek etmeyeceğini "Asma Değişiklik izleme anlama" bölümünde oldukça açıktır. Örneğin Alter Table Add Column:

İzlenen değişiklik tablosuna yeni bir sütun eklenirse, sütunun eklenmesi izlenmez. Yalnızca yeni sütunda yapılan güncellemeler ve değişiklikler izlenir.

Drop Column biraz daha karmaşık.

Bununla birlikte, şemanızı değiştirmek için DB komut dosyalarını kullanmanız gerekir, böylece burada CDC'ye güvenmeniz gerekmez. Bu, KG ve Üretim şemalarınız arasında tutarlılığa sahip olmanızı sağlar. KG'deki değişiklik komut dosyası ile gerçekleştirilmelidir, böylece aynı değişiklikler Ürün'e uygulanabilir. Bu komut dosyalarından şema değişikliklerini çıkarmak çok zor olmamalıdır. Bu, geçmişinizin "zaman" boyutunun gerçek zaman yerine sürüme göre yönlendirildiği anlamına gelebilir, ancak sonuç aynı olacaktır.

Henüz bir hesabınız yoksa, veritabanı şemanızın sürümünü izlemek için bir tablo oluşturun. Ve sonra, şemadaki makroskopik değişiklikleri belirli bir tablodaki mikroskopik değişikliklere göre hizalayabilmeniz için bu veritabanı şeması sürüm tablosunu CDC'nin altına yerleştirin.

Anladığım kadarıyla, CDC'nin şema değişikliğini göstermemesine bakılmaksızın yeni sütunlara eklenen verileri görmeye devam etmelisiniz. Ve tablodan tabloya veri geçişi de CDC tarafından alınmalıdır.

veritabanı şemasını taşırken yakalanan verilerle nasıl başa çıkacağınıza dair en iyi uygulamalar var mı?

Bir denetimi ele alacağınız gibi davranın. Neyi incelediğinizi, neden incelediğinizi ve bu bilgileri ne kadar süre saklamanız gerektiğini anlamanız gerekir. Böyle bir görev söz konusu olduğunda, kapsam ve alıkoyma en büyük iki hata.

CDC'nin raporlama araçları anlaşılır bir şekilde sadedir, bu nedenle değişikliklerin bağlamını bilmeniz gerekir. " Her şeyi takip et" demek çok kolay ! ve sonuç olarak kullanılabilir hiçbir şey yok. Benzer şekilde, her değişikliğin bir kopyasını saklayarak veritabanınızın boyutunu iki katına çıkarabilirsiniz. Çok sayıda kesici uç ve silme içeren yüksek karmaşalı bir masada, astronomik büyüme ile sonuçlanacaksınız. Bu kendi başına kötü değil, ancak bu büyüme için bütçelemeniz ve oluşturulan tüm verileri incelemek için bir aracınız olması gerekiyor.

Böylece bu, tam izlenebilirlik için neden zorlandığınızı anlamanıza geri dönmenizi sağlar. Bu gereksinimin kesinlikle geçerli nedenleri vardır. Ancak, bu gereksinimi neden karşılamanız gerektiğini anlayana kadar veritabanını etkili bir şekilde denetlemenizi yapılandıramazsınız.


1

DDL tetikleyicileriyle sütun eklemeyi izleyebilirsiniz.

CREATE TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ] |
EXTERNAL NAME < method specifier > [ ; ] }

Tablonun CREATE, DROP veya ALTER öğelerini tetiklemek için DDL_TABLE_EVENTS olay grubunu kullanabilirsiniz.

Ancak, kurumsal> 2008 kullanıyorsanız, "tüm denetim özelliklerini bir denetim belirtiminde birleştirebileceği" için SQL Server Denetimi'ne bakmak isteyebilirsiniz . Bu msdn bağlantısı hakkında ayrıntılı bir makale vardır: http://msdn.microsoft.com/en-us/library/dd392015(v=sql.100).aspx .

CREATE SERVER AUDIT audit_name
TO { [ FILE (<file_options> [, ...n]) ] |
APPLICATION_LOG | SECURITY_LOG }
[ WITH ( <audit_options> [, ...n] ) ] }[ ; ]

<file_options>::=
{FILEPATH = 'os_file_path'
[, MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
[, MAX_ROLLOVER_FILES = integer ]
[, RESERVE_DISK_SPACE = { ON | OFF } ] }

<audit_options>::=
{ [ QUEUE_DELAY = integer ]
[, ON_FAILURE = { CONTINUE | SHUTDOWN } ]
[, AUDIT_GUID = uniqueidentifier ]}

Sonra Sunucu veya Veritabanı Özellikleri oluşturun.


0

Simple-Talk , değişiklik verileri yakalama hakkında harika bir makaleye sahiptir ve CDC ile ilgili çok yönlü bir kılavuzun yanı sıra MSDN belgeleri, gereksinimlere bağlı olarak çeşitli yöntemleri açıklamaktadır. Ancak her ikisi de size özel gereksinimlerinizde yardımcı olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.