ORACLE分区表自动清理分区

Posted wenxuechaozhe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE分区表自动清理分区相关的知识,希望对你有一定的参考价值。

背景介绍

ORACLE按照日期创建分区表,仅保留一年数据,每天清理一年前的分区数据。

实现方式

每次清理均处理一年前全部分区,即时某次调度执行失败,也不会造成垃圾数据堆积。

示例代码

--创建存储过程
create or replace procedure zxjy_ora.del_wen_pt
as
 v_sql1 varchar2(2000);
begin
  FOR cur IN (select PARTITION_NAME from user_tab_partitions where table_name='WEN' AND substr(partition_name,2,8)<=to_char(sysdate-366,'yyyymmdd')) LOOP
      v_sql1:='alter table ZXJY_ORA.WEN drop partition '||cur.pname||' ';
      execute immediate v_sql1;
  END LOOP;
end del_wen_pt;
/

---创建调度
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE (
schedule_name     => 'sch_del_wen_pt',
start_date        => SYSDATE,
repeat_interval   => 'FREQ=DAILY; BYHOUR=22;BYMINUTE=30;BYSECOND=0',
comments          => 'EACH ONE DAYS delete A old PARTITION ');
end;
/

--创建作业执行调度
BEGIN 
DBMS_SCHEDULER.CREATE_JOB ( 
job_name => 'JOB_DEL_WEN_PT', 
job_type => 'STORED_PROCEDURE', 
job_action => 'zxjy_ora.del_wen_pt', 
schedule_name => 'sch_del_wen_pt', enabled => true); 
END; 
/

以上是关于ORACLE分区表自动清理分区的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库分区表备份

针对分区表一个月3个分区定期清理脚本

Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态

oracle如何查询当前用户分区表的最大分区,最小分区和当前分区的数量

Oracle12c:自动分区表

oracle分区表按时间自动创建