合并一级分区

使用合并分区时,应注意以下规则:

  • 合并分区操作会把范围分区表或列表分区表的子分区表合并成一个新的子分区表,然后删除原来的子分区表。哈希分区表可以利用结合分区操作来实现类似的功能。
  • 合并两个范围子分区表,则两个子分区表必须是连续的,且合并后范围区间为两个子分区表的并集,比如一个子分区表范围是(10,20),另一个子分区表是(20,40),那么他们可以合并,合并后的范围区间为(10,40)。
  • 合并范围子分区表,如果有一个子分区表的键值是MAXVALUE,那么合并后的子分区表也只有一个键值MAXVALUE。
  • 合并两个列表子分区表时,子分区表的分区键值可以是任意值,没有范围分区表中对键值的限制。如果一个子分区表的键值为DEFAULT与任意一个子分区表进行合并,那么合并后的子分区表将只有DEFAULT键值。
  • 当合并复合分区中的一级子分区表时,不能定义二级子分区表的description。如果定义了分区模板,那么二级子分区表会按照分区模板进行合并。如果未定义模板,那么系统会自动创建DEFAULT或MAXVALUE的二级子分区表,以完成二级子分区表的合并。
  • 合并后局部分区索引将失效。
  • 进行合并分区后,基于主表的全局分区索引,全局非分区索引都会失效,参与合并分区的子分区表的局部分区索引将失效,而其它子分区表的局部分区索引将依然可用。
  • 如果是对范围分区表进行合并操作,那么第一个分区表的分区范围界限列表值一定要小于第二个分区的范围界限列表值。

示例:合并一级分区

下面的例子将p1分区和p2分区合并成到分区p2

--  清理环境
DROP TABLE tab;

-- 创建分区表
CREATE TABLE tab
(
    c1 INT, 
    c2 INT
)
PARTITION BY RANGE (c1)
(
    PARTITION p1 VALUES LESS THAN (10),
    PARTITION p2 VALUES LESS THAN (20),
    PARTITION p_others VALUES LESS THAN (maxvalue)
);

ALTER TABLE tab MERGE PARTITIONS p1, p2 INTO PARTITION p2 UPDATE INDEXES;

--  删除表和表空间
DROP TABLE tab CASCADE;