Search code examples
oracle-databaseoracle11gdatabase-partitioning

Change the range of existing partition


I have a table with two partitions:

create table MY
(
  id           NUMBER not null,
  dat          DATE
)
partition by range (dat)
(
  partition PART_ARCHIVE values less than (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 
  tablespace ARCHIVE,
  partition PART_ACTUAL values less than (MAXVALUE) tablespace ACTUAL

);

Can I change the PART_ARCHIVE partition date interval without recreating table?

I need to set that:

 partition PART_ARCHIVE values less than (TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 

Solution

  • I don't know whether you can do it in a single command but this one should work:

    ALTER TABLE MY SPLIT PARTITION PART_ACTUAL INTO
      (PARTITION PART_2017 VALUES LESS THAN (DATE '2017-01-01'),
       PARTITION PART_ACTUAL);
    
    ALTER TABLE MY MERGE PARTITIONS PART_2017, PART_ARCHIVE INTO PART_ARCHIVE;