Yanlışlıkla zorlamalı çerçeve (forced context) atama.ETL de çalışıyor ama.. 

ODI ile interface geliştirmede çok dar bir kullanım alanı olan forced context (zorlamalı kontekst) özelliği zaman zaman amaç dışı-muhtemelen yanlışlıkla- seçilebiliyor. Bazı durumlarda canlı ortamda dahi farkedilmeyen hatalara sebep olabilen bu özelliği mümkün mertebe kullanmamak en iyisi. Zorlamalı kontekst (Forced context) , istediğiniz bir ETL in hangi çerçevede (context) ETL’i çalıştırısanız çalıştırın ETL in çalıştığı çerçevenin değişmemesini sağlar. Bu çok nadir ihtiyaç duyulabilen bir durumdur.

Aşağıda zorlamalı kontekst in nasıl seçildiği ve tüm sistemde varsa muhtemel hataların nasıl topluca tespit edilebildiği anlatılacak

 

Aşağıdaki imajda  kaynak tablolardan biri seçili ve Property Inspector paneli en altta görünüyor. Burada sarı ile işaretli alan yukarıda bahsettiğimiz zorlamalı çerçeveyi belirlemek için kullanılır. Örnek olarak EMPLOYEE tablosundan DIM_EMPLOYEE tablosuna veri aktaran uyduruk bir interface kullanıyorum

 

[dev_temiz] Oracle Data Integrator 11g _ INT_FCT_CUST_ORDER_ACCT - 28_1_2016 , 22_47_35

 

 

Aynı ekran target datastore seçili iken de görünür. Faraza,  bu inetraface’de bir yerlerde hata ararken bunun ne işe yaradığını daha önce hiç merak etmediğimden belki işe yarar (?)  diye bu alanı kurcalıyor ve yanlışlıkla DEV olrak bırakıyorum. Görüntüsü şu şekilde

[dev_temiz] Oracle Data Integrator 11g - 28_1_2016 , 23_21_51

 

Interface’i  test ettiğimde hiç bir hata almıyorum. Zaten geliştirme ortamındayım. Conetxt alanıda daDEV seçili. Bu inetrface in senaryosunu çıkarıp canlı ortamda çalıştırdığımda, eğer canlı ortamda geliştirme ortamının bağlantı bilgileri bulunuyor ise ve doğrudan veritabanı erişimi var ise bu ETL , PROD konteksti  ile  çalıştırsam da gene çalışacak fakat kaynak olarak canlı ortamdaki employee tablosunu değil de geliştirme ortamındaki employee tablosunu kullanacaktır. Aynı şekilde eğer bu hatayı target datastore üzerinde yapsaydım , ETL hata almayacak fakat canlı ortamdaki tabloya değil geliştirme ortamındaki dim_employee tablosunu dolduracaktı.

 

Sistemde bir tane böyle bir hata gördü iseniz ilgili ETL i açıp Context alanını “Execution Context”  olarak değiştirseniz problem çözülür. Tabi daha ileri görüşlü iseniz bu hatayı bir kere yapanların birçok kere daha yapmış olabileceğini varsayarsınız. Bütün ETL objelerini teker teker kontrol edebilirsiniz tabii ki. Bu zaman kaybına katlanmak istemiyorsanız daha kolay bir yolu var; ODI repository şemasından kontrol etmek. Bunu yapabilemk için maalesef ilgili veritabanına bağlanma yetkiniz olması gerekir

Kontrol etmeniz gereken alanlar; kontekst ataması yapılmış tüm objeleri bulmak, ve bunların senaryolarını bulmak, daha önceden bu şekilde çalışmış oturumları bulmak.

Şu sorgu ile zorlamalı kontekst kulllanan kaynak tabloları görebilirsiniz

SELECT *
FROM snp_source_tab d
WHERE d.context_code IS NOT NULL

 

Target datastore üzerindekileri bulmak için ise snp_pop tablosundaki targ_ctx_code kolonunu kontrol etmelisiniz

 

SELECT p.targ_ctx_cod, p.*
FROM snp_pop p
WHERE p.targ_ctx_code IS NOT NULL

 

Diğer obje türleri için de gene context_code alanlarını arayabilirsiniz. (Prosedürler  üzerinde bu hata nedense yapılmıyor)

Ya da tüm netcede senaryosunu çalıştıracağınızdan senaryolara bakabilirsiniz. Bu bilgi senaryoların alt adımlarında tutulur . Çünkü zorlamalı kontekst ataması alt adım bazında yapılır . Aşağıdaki sorgu ile zorlamalı kontekst kullanarak çalışan tüm işleri görebilirsiniz

 

SELECT tsk.def_context_code – hedef tablo için zorlamalı kontekst bilgisi
, tsk.col_context_code –kaynak tablo için zorlamalı kontekst bilgisi
, tsk.*
FROM snp_scen_task tsk
WHERE     1 = 1
AND (def_context_code IS NOT NULL OR col_context_code IS NOT NULL)

 

 

Not: ODI üzerinde geliştirme ortamı hazırlanırken hatalı bir uygulama olarak geliştirme ve canlı ortamlarda aynı kontekst isimleri farklı adreslere gidecek şekilde tanımlanabiliyor. Zorlamalı kontekst böyle bir ortamda kullanılırsa hataya sebep olmaz. Yani iki yanlış bir doğru eder. (Siz gene de toploji’yi doğru tasarlayın)