Search notes:

Oracle: ALTER TABLE … MOVE INCLUDING ROWS WHERE

Create a table and insert some test data:
create table tq84_data (
    val     number(5,2),
    ins_dt  date          -- Pretend this columns stores the record's insert date
);


begin
   insert into tq84_data values ( 129.27, sysdate - 40);
   insert into tq84_data values ( 554.87, sysdate -  3);
   insert into tq84_data values ( 304.21, sysdate - 35);
   insert into tq84_data values ( 273.98, sysdate - 46);
   insert into tq84_data values ( 520.13, sysdate - 37);
   insert into tq84_data values ( 815.71, sysdate - 15);
   insert into tq84_data values ( 804.68, sysdate - 29);
   insert into tq84_data values ( 877.34, sysdate -  4);
   insert into tq84_data values ( 108.42, sysdate - 37);
   insert into tq84_data values ( 871.66, sysdate - 15);
   insert into tq84_data values ( 729.81, sysdate -  2);
   insert into tq84_data values ( 957.49, sysdate -  7);
   insert into tq84_data values ( 848.32, sysdate - 44);
   insert into tq84_data values ( 108.17, sysdate -  7);
   insert into tq84_data values ( 350.00, sysdate -  8);
   insert into tq84_data values ( 571.49, sysdate - 44);
   insert into tq84_data values ( 886.14, sysdate - 30);
   insert into tq84_data values ( 250.38, sysdate - 26);
   insert into tq84_data values (  74.72, sysdate -  7);
   insert into tq84_data values ( 960.03, sysdate - 35);

   commit;
end;
/
Count the number of records and determine how old the oldest record is:
select
   count(*)                 cnt,
   max  (sysdate - ins_dt)  oldest_rec
from
   tq84_data;
--
--
--        CNT OLDEST_REC
-- ---------- ----------
--         20 46.0000694
Remove all records from the table whose (pretended) insert date is older than a month:
alter table tq84_data
      move online
      including rows where ins_dt >= add_months(sysdate, -1);
The alter table … move statement removed 9 records, the oldest record now is less than one month old:
select
   count(*)                 cnt,
   max  (sysdate - ins_dt)  oldest_rec
from
   tq84_data;
--
--        CNT OLDEST_REC
-- ---------- ----------
--         11 29.0003704
Clean up:
drop table tq84_data;

Index