Oracle Parallel Execution of Procedures

You can call procedures or packages in parallel. Oracle lets us maintain by using sys.dbms_parallel_execute package. At first glance, understanding the package is not that easy. But I prepared an example, and you can easily add or subtract procedures from my template code.

Let’s see my example. I created 5 independent procedures. Name of our procedures : proc_B, proc_A, proc_R, proc_T, proc_U

I created a package pck_execute_parallel and it has 2 procedures. The first one is prc_job_list and it stores list of procedures. The other one is prc_run_parallel and it maintains parallelism.

Continue reading

Garip Hata : ORA-14702: The partition number is invalid or out-of-range

İş yerinde dakika bazlı veri tutan Interval Partition özellikli tablo oluşturup, exchange yapmak istediğimde ORA-14702: The partition number is invalid or out-of-range hatası ile karşılaştım. Internette bu hata için maalesef detaylı bir bilgi bulunmuyor. Özellikle out-of-range konusundaki range nedir sorusunun cevabı yok. Benimle aynı sorunu yaşıyan olabilir diye burada yaşadığım sorunu ve çözümü paylaşmak istiyorum. Eğer INTERVAL PARTITION tipiniz MINUTE ise, 2 partition arasındaki değer 3 yıl’dan fazla olamaz 🙂

Continue reading

TO_DATE() – Hatalı Kaydı Bulma

Oracle’da karakter tipindeki tarihleri, TO_DATE built-in fonksiyonu ile date tipine dönüştürürken bir çok hata ile karşılaşmamız olası. Özellikle veriambarı süreçlerinde milyonluk kayıtlar içinde hatalı kaydı bulmak çok zor olabiliyor. Hatalı kaydı bulmak için Log Errors Into yöntemi kullanılabilir ( bu methodu anlatmak için ayrıca bi başlık gerekir). Ben farklı bir yöntemden daha bahsedeceğim. Tablo oluşturmaya gerek kalmadan hatalı kaydı bulabilirsiniz.

Aşağıdaki sorguda with as içinde 2 doğru kayıt, 1 adet null kayıt var. Diğer kayıtlarda farklı hatalar var. With As’den dönen ornek objesine select atarken where condtition’da TO_DATE içine “DEFAULT NULL ON CONVERSION ERROR” ifadesini ekledim. Bu ifade, to_date’de hata veren kayıtları NULL’a çevirip sql’in hata almamasını sağlar. Where condition’da ilgili ifadeyi is null şeklinde girerek normalde hata verecek kayıtlar listelenir.

Continue reading

SQL – Puzzle 10 – Nasıl Gideceğiz? – How Will We Go?

Geçen hafta iş yerindeki ekiple kahvaltıya gidelim dedik. Kimlerde araç olduğu ve kimlerin hangi araçlara dağılacağı görevi de bana düştü. Bu organizasyonu excel’de yaparken, aklıma bunu SQL – Puzzle’a çevirmek geldi.

Toplam 19 kişi var. 5’inin aracı var. Kalan 14 kişiyi araçlara rastgele dağıtmanızı bekliyorum. Her bir araçta 1 araç sahibi (şoför) 3 de yolcu olacak şekilde dağıtmanız gerekiyor. Tabi ki bi araca mecburen 2 yolcu kalıyor. Çünkü toplamda 20 değil, 19 yolcu var.

We planned having a breakfast last week. Organization of cars and passangers was assigned to me. Of course I opened new sheet in Excel and started arrangements. And I realized that it can be SQL – Puzzle!

There are 19 coworkers and 5 of them has their car. Rest of them is 14 passangers . Each car must have 1 driver(owner) and 3 random passengers. Of course one of the car will have 2 passengers. Because there are 19 passanger at total, not 20.

Continue reading

SQL – Puzzle 9 – Sonraki İş Gününü Bulma

Resmi tatilleri ve haftasonlarını da dikkate alarak, bir sonraki ve iki sonraki iş günlerini SQL ile bulmanızı bekliyorum. “tarihler” isimli 1. tabloda 2022 yılına ait tüm tarihler, “resmi_tatiller” isimli 2. tabloda ise tüm tatil günleri yer almaktadır. “sonuc” isimli 3. Tablo ise, minus yapabilmeniz için sizden beklenen final tablo bulunmaktadır.

Continue reading

Birebir Çoklama – ORA-02437 ORA-02299 Validation Hatası

Veri Ambarı (DWH) işlerinde çoklama sorunu ile çok sık karşılaşmaktayız. Farklı farklı çoklama şekilleri olsa da ben en sık karşılaşılan örneklerden birini paylaşacağım. Veri Ambarı’nda çoklama olmaması için Primary Key (PK) veya Unique Constraint kullanılır. Hatta tabloya çok fazla data insert edileceği zaman, constraint’ler yavaşlığa sebep olmaması için öncesinde disable edilir veya drop edilir. İnsert veya exchange partition işlemi gerçekleştirildikten sonra, PK veya Unique Constraint valide edilir. Eğer çoklama varsa ve tablodaki PK valide edilmek istenir ise kod “ORA-02437: cannot validate (C##USER2.C_PK) – primary key violated” hatasını alacaktır. Eğer çoklama varsa ve tablodaki Unique Constraint valide edilmek istenirse kod “ORA-02299: cannot validate (C##USER2.C_U) – duplicate keys found” hatasını alacaktır. Çözüm, çoklamayı silip, validasyon adımını yapmaktır.

Continue reading

SQL – Puzzle 8 – Çoklama

2 tabloda da 1 er kayıt var. Joinlenecek sütundaki datalar birebir aynı. Fakat full join yapıldığı zaman çoklama oluyor. Neden çokluyor, çözüm nedir ? ( group by min veya max la çözerim demeyin lütfen 🙂 )

There are 2 tables. Each of them have 1 record and their data of join columns same. But when I use full join, it duplicates recod. Why result looks duplicate, how can we fix it ? ( please don’t say that your solution is group by with min or max )

Continue reading

ORA-12899: value too large for column Hatası ve Çözümü

Veri Ambarında (DWH) bazen kaynak tablolardaki sütunların hassasiyeti (precision, duyarlık) artıyor. Örneğin VARCHAR2(20 BYTE)’den, VARCHAR2(30 BYTE)’ye çıkabiliyor. Bu durumda kaynaktan alınan data veri ambarındaki tablolara yazılmak istendiğinde ORA-12899 hatası ile karşılaşılıyor. Bu durumu simüle ettiğim kod aşağıdaki gibidir:

CREATE TABLE tbl_test AS
SELECT CAST(NULL AS VARCHAR2(20 BYTE)) AS clmn
  FROM sys.dual;

INSERT INTO tbl_test
SELECT '30 karakterlik string ifademiz' AS clmn
  FROM sys.dual; 
--ORA-12899: value too large for column "TBL_TEST"."CLMN" (actual: 30, maximum: 20)

2 farklı çözüm yöntemi var. 1 tanesi substr ile insert edilecek tablodaki sütunun maksimum değeri kadar değer alınıp insert edilebilir. Numerik için bu yöntemi önermiyorum. 2. yöntemi yani hedef tablonun ilgili sütununu modify etme yöntemi uygulanmalı.

Continue reading

Exchange Partition Hatası ORA-14097 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. Data kaynaklı sorunu daha önce BURADA paylaşmıştım. Bu başlıkta Metadata kaynaklı sorunu paylaşacağım. Hatta burada birden fazla olasılık var. Ben önce sütun veri tipi kaynaklı olanı, sonra drop column kaynaklı olan durumu paylaşacağım.

Ö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. Exchange olacak ara tabloya Sütun 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-14097: column type or size mismatch in ALTER TABLE EXCHANGE PARTITION
Continue reading

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
Continue reading