博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DB2分区表删除和添加分区
阅读量:4326 次
发布时间:2019-06-06

本文共 3632 字,大约阅读时间需要 12 分钟。

1.数据库版本

2.具体procedure

DROP PROCEDURE DB2USER.TOOLS_PARTITION_TABLE_SHOW (VARCHAR ());CREATE OR REPLACE PROCEDURE Tools_partition_table_show(IN ETL_DATE VARCHAR(8))  /******************************************************************************     NAME:     PURPOSE:       REVISIONS:     Ver        Date        Author        Description     ---------  ----------  ------------  ------------------------------------     1.0        2015-07-22  Zen        1. 作为分区表添加和快速删除分区的一个示例                                           供有相同需求的脚本参考。  ******************************************************************************/  LANGUAGE SQLBEGIN  DECLARE V_LOCATION VARCHAR(100);  DECLARE V_START_TIME TIMESTAMP;  DECLARE V_SQLMSG VARCHAR(255);  DECLARE V_CNT INT;  DECLARE V_PARTITION_NAME VARCHAR(50);  DECLARE V_PARTITION_END VARCHAR(50);  DECLARE EXIT HANDLER FOR SQLEXCEPTION                                                                                           BEGIN                                                                                                                           GET DIAGNOSTICS EXCEPTION 1 V_SQLMSG = MESSAGE_TEXT;                                                                            CALL DB2USER.PRO_LOG(ETL_DATE,'Tools_partition_table_show','测试分区表作业方式',V_START_TIME,current timestamp,'ERROR',V_LOCATION,V_SQLMSG);                                                                              END;  /*清空目标表*/   SET V_START_TIME = current timestamp;  SET V_LOCATION = '清空数据';    /*  DELETE FROM DB2USER.S_CLM_RATE_POL_AAA WHERE BBQ = SUBSTR(ETL_DATE,1,6);    COMMIT;*/  SET V_LOCATION = '测试保单赔率表的抽取开始';  SET V_PARTITION_NAME = 'P'||SUBSTR(ETL_DATE,1,6);  SET V_PARTITION_END = TO_CHAR(add_months(TO_DATE(ETL_DATE,'YYYYMMDD'),1),'YYYYMM');    --SELECT TO_CHAR(add_months(TO_DATE(ETL_DATE,'YYYYMMDD'),1),'YYYYMM') INTO V_PARTITION_END FROM sysibm.dual;    --判断分区是否存在,如果存在,数据转出删除  SELECT COUNT(*) INTO V_CNT FROM syscat.datapartitions t     WHERE tabschema='DB2USER'     AND tabname='S_CLM_RATE_POL_AAA_TEST'    AND datapartitionname=V_PARTITION_NAME ;    IF V_CNT=1 THEN           -- 分区数据转出      EXECUTE IMMEDIATE 'ALTER TABLE S_CLM_RATE_POL_AAA_test DETACH PARTITION '||V_PARTITION_NAME||' INTO DB2USER.TEMP_S_CLM_RATE_POL_AAA';      COMMIT;      EXECUTE IMMEDIATE 'DROP TABLE DB2USER.TEMP_S_CLM_RATE_POL_AAA';  END IF ;    SET V_LOCATION = 'after 分区数据转出';    --非正常DML或DDL 需要调用 sysproc.admin_cmd();  --收集统计信息  CALL SYSPROC.ADMIN_CMD('RUNSTATS ON TABLE db2user.S_CLM_RATE_POL_AAA_test');    -- 添加新分区  EXECUTE IMMEDIATE 'ALTER  TABLE  DB2USER.S_CLM_RATE_POL_AAA_test ADD PARTITION '||V_PARTITION_NAME||' STARTING '||SUBSTR(ETL_DATE,1,6)||' INCLUSIVE ENDING '||V_PARTITION_END||' exclusive';    SET V_LOCATION = 'after 添加新分区';  COMMIT;    EXECUTE IMMEDIATE 'ALTER TABLE DB2USER.S_CLM_RATE_POL_AAA_test ACTIVATE  NOT  LOGGED  INITIALLY';    FOR REC AS WITH TMP(TYPE) AS (SELECT 'AAA1' AS TYPE FROM SYSIBM.DUAL                          UNION ALL                          SELECT 'AAA2' AS TYPE  FROM SYSIBM.DUAL                          UNION ALL                          SELECT 'AAA4' AS TYPE  FROM SYSIBM.DUAL)               SELECT * FROM TMP   DO   SET V_LOCATION = 'test'||REC.TYPE;      INSERT INTO DB2USER.S_CLM_RATE_POL_AAA_test   SELECT      ......END FOR;     CALL DB2USER.PRO_LOG(ETL_DATE,'Tools_partition_table_show','测试分区表作业方式',V_START_TIME,current timestamp,'SUCCESS','','');END;

3.总结:

a.db2 中表分区目前只支持range分区,没有oracle的丰富。

b.分区不能直接删除必须先 DETACH PARTITION ,detach之后必须commit不然会报结构不完善的错误。

c.需要添加新的分区只需要直接 ADD partition。

d.DDL语句用在procedure中需要显示commit。

 

转载于:https://www.cnblogs.com/Alex-Zeng/p/4719210.html

你可能感兴趣的文章
influxDB的安装和简单使用
查看>>
JPA框架学习
查看>>
JPA、JTA、XA相关索引
查看>>
机器分配
查看>>
php opcode缓存
查看>>
springcloud之Feign、ribbon设置超时时间和重试机制的总结
查看>>
Go 结构体
查看>>
LINQ巩固
查看>>
观看杨老师(杨旭)Asp.Net Core MVC入门教程记录
查看>>
优化后的二次测试Miller_Rabin素性测试算法
查看>>
内部类。
查看>>
我的大学生活-4-21-吕家尧
查看>>
5、手把手教React Native实战之盒子模型BoxApp
查看>>
18日站立会议
查看>>
UIDynamic(物理仿真)
查看>>
AngularJS Scope(作用域)
查看>>
HttpClient相关
查看>>
DEPHI XE5 XE6 ANDROID IOS开发的几点体会
查看>>
angular.js 验证码注册登录
查看>>
团队站立会议08
查看>>