通过create table *** as 备份记录比较快。
create table table2006 as select * from tableold where Data>=To_date('2006-01-01','yyyy-mm-dd') and Data <To_date('2007-01-01','yyyy-mm-dd');
create table table2007 as select * from tableold where Data>=To_date('2007-01-01','yyyy-mm-dd') AtoND Data <To_date('2008-01-01','yyyy-mm-dd');
删除记录的话,如果业务上,这张表可以暂停使用的话,以下方式你可以试试看。以防万一,先不要drop原表,rename好了。
先把保留的数据插入新表,再把原表改名,或删除。再将新建的表改成原表。
create table newtable as select * from tableold where Data>=To_date('2007-01-01','yyyy-mm-dd');
如果有索引的话可以先建好。
rename tableold to tableold1; --
rename newtable to tableold;
这样影响业务的时间就是rename两张表的瞬间。
如果 索引名一定要参照以前的名字,那么可能就要rename之后重建索引。影响业务的时间就比较长了,建索引时间比较慢(采用并行稍微快一点)
然后做个存储过程
1、Insert INTO Table2006 Select * From Table Where Data>=To_char('200X-0Y-01','yyyy-mm-dd') AND Data<To_char('200X-0Z-01','yyyy-mm-dd'),将数据一个一个月往里面插入。
2、删除刚才插入的数据 Delete From Table Where Data>=To_char('200X-0Y-01','yyyy-mm-dd') AND Data<To_char('200X-0Z-01','yyyy-mm-dd')
3、做一个JOB,定时调用它