Exchange Partition Hatası ORA-14099 ve Çözümü

Veri Ambarı (DWH) işlerinde son tablolar genelde Exchange Partition ile dolar. Eğer kod Exchange Partition adımında hata alıyorsa, genelde sorun data’dadır veya metadata’da farklılık vardır. Bu başlık altında Data kaynaklı sorunu paylaşacağım. Metadata kaynaklı sorun için başka başlık açmayı planlıyorum.

Öncelikle hatayı simüle etmek için kendim BU LINK‘teki kodları çalıştırıp, tbl_customer_hist ve tbl_customer_hist_exc tablolarını dummy data ile ürettim. Tabloyu elimden geldiğince kapsamlı yaptım çünkü farklı konuları aktarmak için de bu tabloları kullanacağım.

BU LINK‘teki test kodlarını sırayla çalıştırınca en alttaki kodda şu hata ile karşılaşacaksınız:

ORA-14099: all rows in table do not qualify for specified partition

Öncelikle tablo hedef tablo “tbl_customer_hist” hangi alan üzerinden partition’lı hale getirilmiş bunun tespit edilmesi gerekir. Aşağıdaki şekilde bakabilirsiniz.

Kullanacağımız tablo “as_of_date” sütunu üzerinden partition’lı hale getirilmiştir.
  SELECT as_of_date, COUNT(*) 
    FROM tbl_customer_hist_exc
GROUP BY as_of_date;

Exchange yapılacak ara tablo, as_of_date, count(*) ifadesi ile yani aggregate function yardımı ile kontrol edilir.

Data kontrol edilir.

Ara tablodaki kayıtların as_of_date sütununun datasını TAMAMI exchange partition for’da yer alan TO_DATE(‘20220201′,’YYYYMMDD’) tarihinde olmalı. Bu yapmak için hatalı kayıtlar DELETE,UPDATE v.s. yapılabilir.

DELETE FROM tbl_customer_hist_exc WHERE as_of_date = TO_DATE('20220202','YYYYMMDD');
COMMIT;

Delete işlemi sonrası Exchange Partition kodu tekrar çalıştırılırsa, kod hata almayacaktır. “Table altered” mesajı çıkacaktır.

Not 1: Update yapılacaksa, çoklama olmayacağından emin olmak gerekir. Ayrıca çoklayan kayıt sayısı çoksa, data where condtion ile filtrelenip başka tabloya aktarılıp, o tablo ile exchange partition yapılabilir.

Not 2: Google’daki tüm sayfalarda ORA-14099 için yazan çözüm yöntemi “NO CHECK OPTION” eklenmesi yönünde. Burada no checking’den kasıt exchange partition’nın sonuna “WITHOUT VALIDATION” eklenmesidir. Bu option eklenirse, evet hata almaz. Ama data hatalı partition’a gider. Bu sebeple ben bu yöntemi kullanmıyorum. İlerde tabloda arşivleme, update (exchange’li), direct partition erişimi v.s. olursa hata alınır veya tutarsız data ile çalışılır.

Kodların tamamına BURAYA TIKLAYARAK ulaşabilirsiniz.

Leave a Reply

Your email address will not be published. Required fields are marked *