Fiziksel Silme işleminin ODI CDC+SCD ile Hedefe Mantıksal Silme olarak yansıtılması
Kaynakta Change Data Capture(CDC)’ye eklediğimiz bir tabloda yapılan fiziksel silme işlemi Journal tablosuna JRN_FLAG = ‘D’ olarak düşüyor ancak bunun hedefe yansıması IKM Oracle Incremental Update modülünü kullanırsanız yine fiziksel silme şeklinde oluyor, IKM Oracle Slowly Changing Dimension modülünü kullandığınız takdirde ise kaynakta silinen kayıtların hedefi etkilemediğini göreceksiniz. Bu konuyla ilgili olarak SCD modülünün Description bölümünde şöyle (aslında doğru) bir açıklama göreceksiniz.
– As this Knowledge Module is dedicated to Datawarehouse Projects (where data should not be removed), when using it with a journalized Source Datastore, it is not possible to synchronize deletions. Therefore, data should be manually filtered to exclude any source delete events (add a filter on JRN_FLAG = ‘I’).
Ama bazı durumlarda kaynakta meydana gelen fiziksel silme işlemini hedefte mantıksal olarak görmemiz gerekebilir. Talep değişken olmakla beraber en azından kaydın ömrünün tamamlandığını belirtmek üzere ENDING TIMESTAMP ve artık aktif olmadığını işaret etmek üzere de CURRENT RECORD FLAG kolonlarının update edilmesi gerekebilir. (ki bu yazının sebebi değerli bir müşterimizden bu yönde gelen bir taleptir…) Örneğin;

Bu durumda ne yapmam gerektiğini öğrenmek üzere yaptığım bir internet araması sonucunda da özel olarak bu durumda ne yapılması gerektiği konusunda bir içerik bulamadım. Daha sonra KM kodlarını incelediğimde aslında basit bir çözümün olduğunu gördüm. (İnternette çözüm bulamama nedenim bu olabilir 🙂 )
Çözüm :
IKM Oracle SCD modülünde “Historize old rows” adımını inceleyince bu modülün yapmak istediğimiz ENDING TIMESTAMP ve CURRENT RECORD FLAG kolonlarını zaten update ettiğini ancak mantık gereği silinen kayıtları devre dışı bırakmak için iki yerde IND_UPDATE = ‘I’ (sadece yeni eklenen ve update edilen satırlar, evet updateler de Journal tablosuna “I” flagiyle gelir) şartını kullandığını görebilirsiniz. Tek yapmamız gereken silinen kayıtları da Historize adımına dahil etmek, bunun için de aşağıdaki değişikliği yapmamız yeterli.
IKM Oracle Slowly Changing Dimension modülü – “312 Historize Old Rows” betiği Orjinal durumu :

İhtiyacımıza göre modifiye edilmiş hali :

Bu işlem update edilmiş satırların eski sürümünü historize ederken silinen satırların karşılıklarının da Current Record Flag = 0 ve Ending Timestamp =(TXN_TIME ya da SYSDATE) alanlarını günceller. Bu çözüm SCD için hazırlanmıştır benzer yöntemle Incremental Update modülünü de düzenleyebilirsiniz. İyi çalışmalar.
