db2 数据表分区

1. 表分区说明

     在db2数据库中,可对数据表按某个字段进行分区,分区好处是:可扩展表的存储能力、对于大量数据表使用分区字段可提高查询效率。表分区不同于数据库分区,需要在创建表的时候设置分区逻辑。

  在定义表分区的字段时,有几个原则:1.不支持创建只包含长数据类型的多分区表,2.不能改变分区建定义,3.分区键应该包含最频繁连接的列,4.分区键应该由经常参与group by字句的组成,5.任何主键或唯一键必须包含分区列

2.创建表分区

   在创建表时设置分区的列,并设定分区的字段范围,已varchar类型的字段 创建表分区 sql如下:

CREATE TABLE  TABLE_TEST_HAOTD(
         DATADATE VARCHAR(8) NOT NULL,
         DATA1 VARCHAR(10),
         DATA2 VARCHAR(10)
     ) 
     PARTITION BY RANGE(DATADATE)
     (PART "DATAMIN" STARTING(MINVALUE) ENDING('20171231') EXCLUSIVE IN "DATA_TBS_8K",PART "P20180101" STARTING('20180101') ENDING('20170101') EXCLUSIVE IN "DATA_TBS_8K") 

   上SQL中,对表TABLE_TEST_HAOTD按DATADATE创建了按日期天分区:小于20180101的和20180101的两个分区

3.添加分区与删除分区

    表在创建分区时可创建完全部分区,也可以后续添加分区,若一次性把所有分区创建完则后续无法继续添加分区,继续添加其他日期分区SQL如下:

ALTER TABLE TABLE_TEST_HAOTD ADD PARTITION "P20180102" STARTING '20180102' ENDING '20180102' exclusive IN DATA_TBS_8k;
ALTER TABLE TABLE_TEST_HAOTD ADD PARTITION "P20180103" STARTING '20180103' ENDING '20180103' exclusive IN DATA_TBS_8k;
ALTER TABLE TABLE_TEST_HAOTD ADD PARTITION "P20180104" STARTING '20180104' ENDING '20180104' exclusive IN DATA_TBS_8k;
ALTER TABLE TABLE_TEST_HAOTD ADD PARTITION "P20180105" STARTING '20180105' ENDING '20180105' exclusive IN DATA_TBS_8k;

 分区是无法直接删除,先卸载分区,在进行drop操作

ALTER TABLE TABLE_TEST_HAOTD DETACH PARTITION P20180101 INTO TABLE TMP_TESTHAOTD_P20180101

 再进行删除操作(上述SQL执行是若表TMP_TESTHAPTD_P20180101存在会报错)

DROP TABLE TMP_HAOTDTEST_P20180101

需要注意的是:DETACH操作是异步的,所以执行卸载后立马执行删除操作容易出现删除失败

4.问题说明

  添加分区时若出现下面报错:

    DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0636N Range specified for data partition "PXXXX" is not valid. Reason code="10". SQLSTATE=56016

    上面错误是分区创建完毕,无法添加新的分区,需要检查分区的创建是否重复

猜你喜欢

转载自www.cnblogs.com/haotengda/p/9719729.html