SSIS’de CDC Control Task
Merhaba,
Bir süredir CDC yani Change Data Capture konusu ile ilgilenmekteyim. Niyetim bu konu hakkında SSIS’de yer alan komponentleri kullanarak bir uygulama yapmak. Bu yazımda CDC Control Task komponenti hakkında bilgi vereceğim. Ama öncelikle CDC ne demek kısaca ona bakalım.
Change Data Capture (CDC) Nedir?
CDC, veritabanlarında gerçekleşen herhangi bir değişikliği (INSERT,UPDATE,DELETE işlemleri) kaydetmek için kullanılan bir teknolojidir. Diğer bir deyişle, kurumsal veri kaynaklarında yapılan değişikliklerin tanımlanması,yakalanması ve teslimine dayanan bir veri entegrasyonu yaklaşımıdır. Bir veritabanı veya veri ambarı sisteminde kullanılabilir.
CDC’yi uygulamanın birçok farklı yolu vardır. CDC hakkında daha fazla bilgi edinmek isterseniz makalemin bitişine eklediğim kaynak linkleri ziyaret edebilirsiniz. CDC’nin ne olduğunu kısaca öğrendikten sonra SSIS 2012 ile gelen CDC control task komponentini inceleyelim.
CDC Control Task
SSIS 2012 ve sonraki versiyonlar SQL Server ve Oracle ile CDC’yi gerçekleştirmeyi sağlayan 3 ayrı component sunuyor. Bunlar CDC Control Task , CDC Source ve CDC Splitter. Bir uygulama yapmadan önce bu komponentlerin nasıl yapılandırıldığını öğrenmek istedim. Bu komponentlerden CDC control task, CDC paketlerinin yaşam döngüsünü kontrol etmek için kullanılıyor.
CDC Contol Task 2 farklı işlem grubunu yönetir.
- İlk yükleme ve değişiklik işleminin senkronizasyonu yönetir
- Bir CDC paketinin çalıştırılması için LSN’lerin değişiklik işleme aralığını yönetir ve neyin başarılı bir şekilde işlendiğini takip eder.
LSN(Log Sequence Number) : SQL Server’ın her hareketi kaydederken kullandığı tekil id’dir.
CDC Control Task’ı SSIS Toolbox içerisindeki Other Task başlığı altında bulabilirsiniz.
CDC komponentleri 3 adet inital load (ilk yükleme) ve değişiklik işleme senaryosunu destekler. Bunlar aşağıdaki gibi tanımlanmaktadır.
- Bir veritabanı anlık görüntüsü ile yapılan ilk yüklemede değişiklik işleme anlık görüntü olayının LSN’si ile başlar
- Hareketsiz bir veritabanından yapılan ilk yükleme. Bu senaryoda ilk yükleme sırasında bir değişiklik yapılmaz. Bu nedenle mevcut LSN, ilk yükleme sırasında herhangi bir zamanda örneklenir ve değişiklik işleme bu LSN ile başlar.
- Aktif bir veritabanından ilk yükleme.Bu seneryado, ilk yükleme devam ederken veritabanında değişiklikler yapılır ve değişikliği işlemenin tam olarak başlatılabileceği tek bir LSN yoktur. Bu durumda ilk yüklemeden önce ve sonra kaynak veritabanı geçerli LSN’si örneklenebilir.Daha sonra, değişiklikler işlenirken, değişikliklerin bazıları ilk yüklemede zaten görüldüğünden, ilk yüklemeye paralel olarak yapılan değişiklikler işlenirken dikkatli olunmalıdır. (Örneğin ;bir insert işlemi, eklenen satır ilk yüklemede okunduğundan yinelenen anahtar hatası ile başarısız olabilir.)
Aşağıdaki işleler CDC Control task tarafndan gerçekleştirilebilir.
- Reset CDC State : Bu işlem mevcut CDC ile ilişkili CDC State’i sıfırlamak için kullanılır.
- Mark Initial Load start : İlk yükleme kaynak tablodan herhangi bir veriyi okumadan önce LSN’yi kaynak veritabanına kaydeder. Yukarıda bahsettiğim senaryo 3 ile kullanılır.
- Mark Initial Load End:Kaynak tablodan veri yüklemesi tamamlandıktan sonra LSN’yi kaynak verilere kaydeder. Yukarıda bahsettiğim senaryo 3 ile kullanılır.
- Mark CDC Start: Mevcut LSN’yi kaydeder ve değişikliği işlemeye o noktadan itibaren başlar. Senaryo 1 ve senaryo 2 de kullanılır.
- Get Processing Range : CDC kaynağının hangi LSN’lerin okunması gerektiğini bilmesi için bir veri akışından önce kullanılır.
- Mark Processed Range: İşlenen son LSN’yi belirtmek için bir veri akışından sonra kullanılır.
Aşağıdaki resim de CDC Control Task Editörünün arayüzünü görebilirsiniz. Arayüzde yer alan her bir seçeneğin ne olduğuna bakalım.
1.SQL Server CDC database ADO.Net connection manager : En az bir tabloda CDC’nin etkinleştirildiği SQL veritabanına bağlantı kurar.
2.CDC Control operation: Yukarıda da bahsetmiş olduğum CDC Control task tarafından gerçekleştirilen işlemleri içeren kısımdır. Burada seçilen işlem, gerekli bilgileri depolamak için bir sonraki seçenekteki değişkeni kullanır.
3.Variable containing the CDC state: 2 numaralı seçenekten bilgileri depolar ve diğer CDC control tasks lar arasında iletir.
4.SQL Server LSN to start the CDC or Snapshot database name, leave empty for current LSN: Geçerli kaynak veritabanı LSN’si veya ilk yüklemenin yapıldığı veritabanı adı. Bu CDC’sinin nereden başlaması gerektiğini gösterir. CDC control operation’da Mark CDC Start seçildiğinde aktif hale gelir. Bu alanı boş bırakmak, mevcut LSN’yi varsayılan olarak seçer.
5.Connection manager for the database where the state is stored: Durum tablosunun depolandığı veri tabanına bağlantı kurar.
6.Table of use for storing state: CDC durumunun depoladığı tablo yani değişikliklerin kaydedildiği tablo olarak düşünebiliriz.
7.State Name: Durum tablosundaki durumu aramak için kullanılır. Yani işlemin INSERT,UPDATE,DELET mi olduğunu gösterir.
Ek olarak, automatically store state in a database table seçeneği seçilmez ise, işlem başladığında CDC durumunu yüklemeniz ve işlem bittiğinde durumu manuel olarak kaydetmeniz gerekir.
CDC CONTOL TASK İÇİN GEREKSİNİMLER
- CDC’nin etkinleştirildiği bir veritabanı,
- Değişikliklerin izlendiği veritabanına ADO.NET bağlantısı,
- Mevcut CDC durumunu depolamak için bir tablo
- Paket içerisinde mevcut CDC durumunu depolamak için bir değişken
İlk gereksinim hariç diğer tüm gereksinimler komponent içerisinde bulunan new butonu ile sağlanabilir. Anlaması karmaşık görünsede kullanımı oldukça kolay gibi 😊
Aşağıdaki sorgu ilk gereksinim olan, SQL veritabanında CDC’yi etkinleştirmenize yardımcı olacaktır.
EXEC sys.sp_cdc_enable_db
Bu yazımda CDC Control Task’ı tanımaya ve anlamaya çalıştım. Sonraki hedefim diğer CDC bileşenlerini ayrı ayrı inceleyip, sonrasında bir uygulama ile SSIS paketi oluşturmak.
Kaynaklar
https://www.hvr-software.com/blog/change-data-capture/
https://en.wikipedia.org/wiki/Change_data_capture
https://medium.com/@bercemcatalkaya/cdc-change-data-capture-88e9ec6f51d7
http://www.bradleyschacht.com/ssis-2012-change-data-capture-cdc-control-task/
https://www.mattmasson.com/2012/02/cdc-control-task-operations/