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

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