删除大量过期分区


点击(此处)折叠或打开

  1. --以天分区时
  2. --过程
  3. create or replace
  4. PROCEDURE MONITORMSG_DROPPART(
  5.   DaysAmount NUMBER --删除间隔日期
  6. )
  7. AS
  8.  v_SqlExec VARCHAR2(2000); --DDL语句变量
  9.  --先查找DaysAmount之前的表分区
  10.  cursor cursor_part is
  11.  select partition_name from user_tab_partitions
  12.  WHERE table_name= \'MONITORMSG\' AND to_date(SUBSTR(partition_name,12),\'YYYYMMDD\')< sysdate- daysamount order by partition_name;                                     -----substr这个地方视具体情况而定
  13.  cursor_oldpart cursor_part%rowType;
  14.  begin
  15.  open cursor_part;
  16.    loop
  17.    fetch cursor_part into cursor_oldpart;
  18.    exit when cursor_part%notfound;
  19.    v_sqlexec:=\'ALTER TABLE MONITORMSG DROP PARTITION \'||cursor_oldpart.partition_name;---删除多少天前的分区
  20.    DBMS_Utility.Exec_DDL_Statement(v_SqlExec);
  21.    end loop;
  22.    close cursor_part;
  23.  END MONITORMSG_DROPPART;
  24.  
  25.  
  26. /*
  27.  
  28. declare
  29. DaysAmount NUMBER;
  30. begin
  31. MONITORMSG_DROPPART(340);
  32. end;
  33. /





  34. ----用这种游标的方法也可以实现
  35. declare
  36. v_sql varchar2(1024);
  37. cursor c1(DaysAmount in number) is select PARTITION_NAME from USER_TAB_PARTITIONS where TABLE_NAME =\'MONITORMSG\'and
  38. to_date(substr(partition_name,12),\'yyyymmdd\')
  39. v_cur c1%rowtype;
  40. begin
  41. open c1(&n); ----也就是上面的精简版
  42. loop
  43.    fetch c1 into v_cur;
  44.    exit when c1%notfound;
  45.    v_sql := \'alter table MONITORMSG drop partition \' ||v_cur.partition_name;
  46.    execute immediate v_sql;
  47.    end loop;
  48.    close c1;
  49. end;
  50.  



  51. --删除多少月前
  52. --过程
  53. create or replace
  54. PROCEDURE MONITORMSG_DROPPART(
  55.   monsAmount NUMBER --删除间隔日期
  56. )
  57. AS
  58.  v_SqlExec VARCHAR2(2000); --DDL语句变量
  59.  --先查找monsAmount之前的表分区
  60. cursor c1 is select PARTITION_NAME from USER_TAB_PARTITIONS where TABLE_NAME =\'MONITORMSG\'and
  61. months_between(trunc(sysdate,\'mm\'),trunc(to_date(substr(partition_name,12),\'yyyymmdd\'),\'mm\'))>=monsAmount order by partition_name ;
  62.  cursor_oldpart c1%rowType;
  63.  begin
  64.  open c1;
  65.    loop
  66.    fetch c1 into cursor_oldpart;
  67.    exit when c1%notfound;
  68.    v_sqlexec:=\'ALTER TABLE MONITORMSG DROP PARTITION \'||cursor_oldpart.partition_name;---删除多少月前的分区
  69.    DBMS_Utility.Exec_DDL_Statement(v_SqlExec);
  70.    end loop;
  71.    close c1;
  72.  END MONITORMSG_DROPPART;
  73.  
  74.  
  75. declare
  76. DaysAmount NUMBER;
  77. begin
  78. MONITORMSG_DROPPART(40);
  79. end;
  80. /


  81. --游标方法
  82. declare
  83. v_sql varchar2(1024);
  84. cursor c1 is select PARTITION_NAME from USER_TAB_PARTITIONS where TABLE_NAME =\'MONITORMSG\'and
  85. months_between(trunc(sysdate,\'mm\'),trunc(to_date(substr(partition_name,12),\'yyyymmdd\'),\'mm\'))>=40 order by partition_name ;
  86. v_cur c1%rowtype;
  87. begin
  88. open c1; ----也就是上面的精简版,月数也可以改成自己填,只需要稍微变更一下代码成天数那种形式即可
  89. loop
  90.    fetch c1 into v_cur;
  91.    exit when c1%notfound;
  92.    v_sql := \'alter table MONITORMSG drop partition \' ||v_cur.partition_name;
  93.    execute immediate v_sql;
  94.    end loop;
  95.    close c1;
  96. end;
  97.  
  98. */

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

转载于:http://blog.itpub.net/29096438/viewspace-1578078/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值