Oracle分区表的一些简单技巧

1.查找表分区的情况

 SELECT *  FROM USER_TAB_PARTITIONS
  WHERE TABLE_NAME = XXXX

可查对应表的具体分区情况

2.分区表清空指定分区

不删分区仅清空分区数据推荐使用

ALTER TABLE TABLE_NAME TRUNCATE PARTITION_NAME

不建议使用

DELETE FROM TABLE_NAME WHERE PARTITION_NAME = XXXX

DELETE FROM 的形式对于数据量大的表来说有可能导致数据库服务卡死,且对水位线无影响

清空数据且删除数据

ALTER TABLE TABLE_NAME DROP PARTITION PARTITION_NAME

3.结合以上两点的一个小的实际应用

目标表为list分区,且存储周期为36个月,每个存储周期为1个分区,分区名为SUM_MONTHYYYYMM,逻辑实现表同步之前的分区清空操作

Created with Raphaël 2.2.0 开始 判断是否已有指定的分区 清空指定分区 结束 判断分区表的分区是否超过36个 删除最小周期 添加指定分区 yes no yes no

具体代码如下

DECLARE
  V_SQL       VARCHAR2(500);
  V_SUM_MONTH VARCHAR2(10) := '201910';
  V_PART_RES  NUMBER :=0;
  V_PART_NUM  NUMBER :=0;
  V_MIN_MONTH VARCHAR2(30);
BEGIN
  V_SQL := 'SELECT COUNT(1) FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = ''TABLE_NAME'' AND PARTITION_NAME= ''SUM_MONTH' || V_SUM_MONTH || '''';
  EXECUTE IMMEDIATE V_SQL
    INTO V_PART_RES;
  --DBMS_OUTPUT.PUT_LINE(V_PART_RES);
  IF V_PART_RES = 0 THEN --判断是否有对应分区
    BEGIN --没有分区则添加对应分区
      V_SQL := 'SELECT COUNT(1) FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = ''TABLE_NAME''';
      EXECUTE IMMEDIATE V_SQL  INTO V_PART_NUM; --查询当前存储周期数
      IF V_PART_NUM >= 36 THEN --超过36个周期清除最小周期
        BEGIN
          V_SQL := 'SELECT MIN(PARTITION_NAME) FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = ''TABLE_NAME''';
          EXECUTE IMMEDIATE V_SQL  INTO V_MIN_MONTH; --查询当前最小统计周期
          EXECUTE IMMEDIATE 'ALTER TABLE TABLE_NAME DROP PARTITION ' ||V_MIN_MONTH; --删除最早的分区
        END;
      END IF;
      V_SQL := 'ALTER TABLE TABLE_NAME ADD PARTITION SUM_MONTH' ||
               V_SUM_MONTH || ' VALUES(''' || V_SUM_MONTH || ''')';
      EXECUTE IMMEDIATE V_SQL;
    END;
  ELSE
    BEGIN --有分区则清空对应分区
      EXECUTE IMMEDIATE 'ALTER TABLE TABLE_NAME TRUNCATE PARTITION SUM_MONTH'||V_SUM_MONTH;
    END;
  END IF;
END;

需要注意,分区名称格式得固定,且需要同步的分区字段格式不变
如果有其他更好的实现方法欢迎讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值