分裂二级分区

使用ALTER TABLE … SPLIT SUBPARTITION语句分裂二级子分区表。

在执行分裂分区时要创建两个新的分区表,然后在重新分布行到两个新的分区表里。这个代价是非常大的,因为这需要扫描被分区的表的所有行,然后再插入到新的分区里。如果不使用UPDATE INDEX从句,那么局部和全局索引也需要重建。

注意:分裂二级分区时,只能指定tablespace,压缩属性和lob属性。其他规则同分裂一级分区。

示例:分裂二级子分区表

将二级子分区表p1_sub2分裂成两个二级子分区表p1_sub2_1和p1_sub2_2

--  清理环境
DROP TABLE tab;
DROP TABLESPACE ts1;

--  创建表空间
CREATE TABLESPACE ts1 DATAFILE 'ts1.dt' SIZE 5M AUTOEXTEND ON NEXT 5M;

-- 创建分区表
CREATE TABLE tab
(
    c1 int, 
    c2 varchar(2)
)
PARTITION BY RANGE(C1)
SUBPARTITION BY LIST(C2)
(
    PARTITION p1 VALUES LESS THAN(10)
    (
        SUBPARTITION p1_sub1 VALUES ('A1', 'A2'),
        SUBPARTITION p1_sub2 VALUES ('B1', 'B2', 'B3', 'C1', 'C2', 'C3')
    ),
    PARTITION p2 VALUES LESS THAN(20)
);


ALTER TABLE tab SPLIT SUBPARTITION p1_sub2 values('B1', 'B2', 'B3')
INTO ( SUBPARTITION p1_sub2_1 TABLESPACE ts1, SUBPARTITION p1_sub2_2) ;


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