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 🙂

Hata alan kod:

--drop table tbl_interval_partition_minute;
CREATE TABLE tbl_interval_partition_minute 
(
    dt DATE,
    column1 VARCHAR2(10 CHAR)
)
PARTITION BY RANGE (DT)
INTERVAL (NUMTODSINTERVAL(1,'MINUTE'))
(
PARTITION p_initial values less than (TO_DATE('2021-11-19 01:01:00', 'SYYYY-MM-DD HH24:MI:SS')),
PARTITION p_secondp values less than (TO_DATE('2021-11-19 01:02:00', 'SYYYY-MM-DD HH24:MI:SS'))
);

--drop table tbl_interval_part_exchange;
CREATE TABLE tbl_interval_part_exchange
(
    dt DATE,
    column1 VARCHAR2(10 CHAR)
);

INSERT INTO tbl_interval_part_exchange
SELECT TO_DATE('2024-11-19 01:01:02', 'SYYYY-MM-DD HH24:MI:SS') as dt, 't' as column1 FROM dual;
COMMIT;
--amaç boş partition oluşturmak.
LOCK TABLE tbl_interval_partition_minute
  PARTITION FOR (TO_DATE('2024-11-19 01:01:02', 'SYYYY-MM-DD HH24:MI:SS'))
  IN SHARE MODE;
  COMMIT;

ALTER TABLE tbl_interval_partition_minute
  EXCHANGE PARTITION FOR (TO_DATE('2024-11-19 01:01:02', 'SYYYY-MM-DD HH24:MI:SS'))
  WITH TABLE tbl_interval_part_exchange;

Sorunun tespiti için ara tablomdaki değeri 2022 yaparak, yıl farkını azalttım. Böylece aşağıdaki kod hata almadı.

truncate table tbl_interval_part_exchange;
INSERT INTO tbl_interval_part_exchange
SELECT TO_DATE('2022-11-19 01:01:02', 'SYYYY-MM-DD HH24:MI:SS') as dt, 't' as column1 FROM dual;
COMMIT;

LOCK TABLE tbl_interval_partition_minute
  PARTITION FOR (TO_DATE('2022-11-19 01:01:02', 'SYYYY-MM-DD HH24:MI:SS'))
  IN SHARE MODE;
  COMMIT;

ALTER TABLE tbl_interval_partition_minute
  EXCHANGE PARTITION FOR (TO_DATE('2022-11-19 01:01:02', 'SYYYY-MM-DD HH24:MI:SS'))
  WITH TABLE tbl_interval_part_exchange;

Çözüm olarak bir çok yöntem var. tabloyu range’e çevirip, partition ekliyebilirsiniz. Sonra tekrar interval’a çevirebilirsiniz. Veya tablo boş ise baştan oluşturabilirsiniz. Veya 3 yıldan kısa aralıklar dummy datalar için partition oluşturabilirsiniz.

Leave a Reply

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