通过分区技术定期删除大表中的过期(比如一年前)数据

说明:使用oracle JOB调用存储过程定期删除分区表SALE_DATA中过期的分区
SQL> select partition_name,tablespace_name,segment_type from user_segments where segment_name='SALE_DATA'  order by 2;


PARTITION_NAME       TABLESPACE_NAME      SEGMENT_TYPE
------------------------------ ------------------------------ ------------------
SALES_2016_1       TBS_SALES_2016_1      TABLE PARTITION
SALES_2016_10       TBS_SALES_2016_10      TABLE PARTITION
SALES_2016_11       TBS_SALES_2016_11      TABLE PARTITION
SALES_2016_12       TBS_SALES_2016_12      TABLE PARTITION
SALES_2016_2       TBS_SALES_2016_2      TABLE PARTITION
SALES_2016_3       TBS_SALES_2016_3      TABLE PARTITION
SALES_2016_4       TBS_SALES_2016_4      TABLE PARTITION
SALES_2016_5       TBS_SALES_2016_5      TABLE PARTITION
SALES_2016_6       TBS_SALES_2016_6      TABLE PARTITION
SALES_2016_7       TBS_SALES_2016_7      TABLE PARTITION
SALES_2016_8       TBS_SALES_2016_8      TABLE PARTITION
SALES_2016_9       TBS_SALES_2016_9      TABLE PARTITION
SALES_2017_1       TBS_SALES_2017_1      TABLE PARTITION




创建删除分区的存储过程
create or replace procedure drop_partition as 
  v_part_name varchar2(100);
  v_over_time number;
  v_err_num number;
  v_err_msg varchar2(100);
begin
  select min(partition_name) into v_part_name from user_tab_partitions where table_name='SALE_DATA';
  select months_between(sysdate,to_date(substr(min(partition_name),7,8),'yyyy-mm')) into v_over_time from user_tab_partitions where table_name='SALE_DATA';
  if v_over_time>2 then
execute immediate 'alter table sale_data drop partition '||v_part_name;
  end if;
EXCEPTION
  WHEN OTHERS THEN
v_err_num := SQLCODE;
v_err_msg := SUBSTR(SQLERRM,1,100);
dbms_output.put_line('执行错误: '||v_err_num||' 错误描述: '||v_err_msg);
end drop_partition;
/


创建JOB
declare 
  job number;
begin
  dbms_job.submit(job,'drop_partition;',sysdate,'sysdate+1');
end;
/


查看JOB号
SQL> select job from user_jobs;


       JOB
----------
23


手工执行进行测试
begin
dbms_job.run(23);
end;
/
成功删除第一个分区
SQL> select partition_name,tablespace_name,segment_type from user_segments where segment_name='SALE_DATA'  order by 2;


PARTITION_NAME       TABLESPACE_NAME      SEGMENT_TYPE
------------------------------ ------------------------------ ------------------
SALES_2016_10       TBS_SALES_2016_10      TABLE PARTITION
SALES_2016_11       TBS_SALES_2016_11      TABLE PARTITION
SALES_2016_12       TBS_SALES_2016_12      TABLE PARTITION
SALES_2016_2       TBS_SALES_2016_2      TABLE PARTITION
SALES_2016_3       TBS_SALES_2016_3      TABLE PARTITION
SALES_2016_4       TBS_SALES_2016_4      TABLE PARTITION
SALES_2016_5       TBS_SALES_2016_5      TABLE PARTITION
SALES_2016_6       TBS_SALES_2016_6      TABLE PARTITION
SALES_2016_7       TBS_SALES_2016_7      TABLE PARTITION
SALES_2016_8       TBS_SALES_2016_8      TABLE PARTITION
SALES_2016_9       TBS_SALES_2016_9      TABLE PARTITION
SALES_2017_1       TBS_SALES_2017_1      TABLE PARTITION

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30373263/viewspace-2064704/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30373263/viewspace-2064704/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值