ODI Change Data Capture kullanımı (Journalizing)
Veri ambarına aktarım yaparken her seferinde kaynak tablodaki tüm veriyi hedefle karşılaştırmak yerine ilk aktarımdan sonra sadece değişen kayıtları karşılaştırıp çok daha küçük bir veri seti üzerinde işlem yaparak aktarım işlemini tamamlayabiliriz. Değişen kayıtların tespit edilmesi konusunda da ODI’ın bize sunduğu Journalizing özelliğinden yararlanabiliriz. Bu yazımızda temel manada Değişen verileri yakalama (CDC) ve hedef tabloyla birleştirme (MERGE) işlemini ODI üzerinde nasıl yapacağımızı ele alacağız.
Öncelikle anlatımda bize yardımcı olacak tabloları oluşturalım;
Kaynak Tablo :
CREATE TABLE CDC_SOURCE ( KISI_ID NUMBER NOT NULL PRIMARY KEY, AD VARCHAR2(50 BYTE), SOYAD VARCHAR2(50 BYTE) );
* Kaynak tabloda primary key tanımlanmış olması gerekiyor.
Hedef Tablo :
CREATE TABLE CDC_TARGET ( KISI_ID NUMBER, AD VARCHAR2(50 BYTE), SOYAD VARCHAR2(50 BYTE) );
İlk aktarım vs. yoluyla ilk anda ikisinin de eşitlenmiş olduğunu varsayıyorum. Bizim örneğimizde ikisi de boş olduğu için eşit zaten ^^
Reverse Engineer araclığıyla tablolarımızı modele ekliyoruz.

Bu adımdan sonra source ve target tabloları kendi modelleri altında görebiliyor olmamız gerekiyor.

Modelde kaynak tablonun üzerine sağ tıklayıp Change Data Capture menüsünün altından Add to CDC‘yi seçiyoruz.

Bu aşamada gelecek doğrulama sorusunu evet diyerek geçtikten sonra kaynak tablo

üzerinde CDC’ye dahil olduğunu belirten sarı bir saat simgesi görüyorsanız şu ana kadar her şey yolunda demektir.
Şu ana kadar her şey yolundaysa yine Change Data Capture menüsü altından Start Journal diyebiliriz.

Subscriber seçiminde SUNOPSIS seçip devam edince kaynak tablo üzerindeki saat simgesinin renginin sarıdan yeşile dönmüş olması gerekiyor.

An itibariyle ODI Journalize işlemine başlamıştır. Örnek bir kaç kayıt ekleyerek kontrol edelim.
INSERT INTO CDC_SOURCE (KISI_ID, AD, SOYAD) VALUES (1, ‘METİN’, ‘TEKİN’); INSERT INTO CDC_SOURCE (KISI_ID, AD, SOYAD) VALUES (2, ‘ALİ’, ‘GÜLTİKEN’);
sqlplus’ta ilgili scriptleri çalıştırıp, ODI’da kaynak tablo üzerinde Journal Data seçeneğini seçersek işlem gören kayıtları yakaladığını görebiliyor olacağız.

*** Şu an sadece değişen kayıtları yakalamış olduk. bunları hedef tabloya uygulamak için Interface hazırlamamız gerekiyor.
Interface adımında özellikle dikkat etmemiz gereken nokta 2 nokta var, bunlardan birincisi Mapping sekmesinde kaynak tablonun Property Inspector ekranında Journalized Data only seçeneğini işaretlemiş olmamız gerektiği,

Bir diğeri ise kullanacağımız JKM ve IKM modüllerini ihtiyacımıza uygun seçmemiz. Bu örnekte JKM olarak JKM Oracle Simple, IKM olarak ise IKM Oracle Incremental Update (MERGE) modülünü kullandım. Siz ihtiyacınıza bağlı olarak SCD modüllerinden birini veya daha başka bir modül kullanabilirsiniz.

Hazırladığımız interface’i çalıştırdıktan sonra hedef tabloyu kontrol edersek yapılan değişikliklerin hedefe uygulandığını görebiliyor olacağız.

* Bu aşamada ODI Journal tablosunu sıfırlar.
Bir test daha yaparak konuyu tamamlayalım; Bir kayıt ekleyip, var olan bir kaydı da güncelledikten sonra ne olacağını görelim.
INSERT INTO CDC_SOURCE (KISI_ID, AD, SOYAD) VALUES (3, ‘FEYYAZ’, ‘UÇAR’); UPDATE CDC_SOURCE SET SOYAD = ‘SARIFIRTINA’ WHERE KISI_ID = 1;
Journal Data;

Interface’i tekrar çalıştırdıktan sonra hedef tablo (CDC_TARGET) ;

Interface’in senaryosunu oluşturup zamanlarsanız belirteceğiniz periyodda hedef tablonuzdaki verilerin kaynak tabloya eşitlenmesini sağlayabilirsiniz. İyi çalışmalar.
