Yukarıdaki gibi bir hata almanız durumunda sorunu nasıl çözebileceğinizden bahsediyor olacağım. Bu hatanın nasıl oluştuğu ile ilgili olarak partition tabloyu create ederken oluşturmuş olduğunuz partitionları drop etmeye çalıştığınız da bu hatayı alırsınız. Interval opsiyonu kullanacaksanız tabloyu create ederken sadece ilk partitionı set etmeniz yeterli olacaktır.
Her zamanki yine bir örnek üzerinden gidelim.
Aşağıdaki gibi bir tablom var ve amacım içerisinde data olmayan partitionları drop etmek (tabi ilk partition olan part1 hariç)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
col table_name format a16 col partition_name format a14 col interval format a8 col tablespace_name format a18 select table_name, partition_name, interval,tablespace_name from dba_tab_partitions where table_name = 'LOG_ACTIVITY' TABLE_NAME PARTITION_NAME INTERVAL TABLESPACE_NAME ---------------- -------------- -------- ------------------ LOG_ACTIVITY PART1 NO TBS_LOG_ACTV2 LOG_ACTIVITY SYS_P66200 NO TBS_LOG_ACTV1 LOG_ACTIVITY SYS_P69074 YES TBS_LOG_ACTV1 LOG_ACTIVITY SYS_P70854 YES TBS_LOG_ACTV3 LOG_ACTIVITY SYS_P73334 YES TBS_LOG_ACTV3 LOG_ACTIVITY SYS_P76419 YES TBS_LOG_ACTV3 6 rows selected. |
Partitionlarda data olup olmadıklarına bakalım;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
===> select count(*) from kamil.LOG_ACTIVITY partition (PART1) COUNT(*) ---------- 0 1 row selected. ===> select count(*) from kamil.LOG_ACTIVITY partition (SYS_P66200) COUNT(*) ---------- 0 1 row selected. ===> select count(*) from kamil.LOG_ACTIVITY partition (SYS_P69074) COUNT(*) ---------- 6512264 1 row selected. ===> select count(*) from kamil.LOG_ACTIVITY partition (SYS_P70854) COUNT(*) ---------- 12960165 1 row selected. ===> select count(*) from kamil.LOG_ACTIVITY partition (SYS_P73334) COUNT(*) ---------- 12422469 1 row selected. ===> select count(*) from kamil.LOG_ACTIVITY partition (SYS_P76419) COUNT(*) ---------- 6290955 1 row selected. |
SYS_P66200 isimli partition benim istediğim kritere uygun bunu drop edebiliriz;
1 2 3 4 5 |
===> ALTER TABLE KAMIL.LOG_ACTIVITY DROP PARTITION SYS_P66200 update global indexes ALTER TABLE KAMIL.LOG_ACTIVITY DROP PARTITION SYS_P66200 update global indexes Error at line 1 ORA-14758: Last partition in the range section cannot be dropped Script Terminated on line 53. |
Bu sorunun üstesinden gelmek için öncelikle tabodaki interval opsiyonunu kaldırıyoruz. Sonra drop işlemini yapıp tekrar interval opsiyonunu set ediyoruz ;
1 2 3 4 5 6 7 8 |
===> alter table KAMIL.LOG_ACTIVITY set interval () Table altered. ===> ALTER TABLE KAMIL.LOG_ACTIVITY DROP PARTITION SYS_P66200 update global indexes Table altered. ===> alter table KAMIL.LOG_ACTIVITY set interval (NUMTOYMINTERVAL(1,'MONTH')) Table altered. |