添加分区值

添加分区值:可以通过添加分区值操作来扩展列表分区表的分区键值。

使用ALTER TABLE … MODIFY PARTITION ... ADD VALUES语句添加分区值。待添加的值必须未包括在任何其它子分区表的分区键值中。任何相应的局部索引分区的分区键值也相应变化,且任何全局索引和局部分区索引保持可用。将值添加到其它子分区表的分区键值中时,default子分区表的存在可以对性能产生影响。这是因为数据库必须检查所添加的值尚未存在于default子分区表中,否则不允许添加。

不可以向default子分区表中添加分区值。可以使用类似的方式为子分区表添加分区值。正在添加的值必须未包括在所属的子分区表内的其他任何子分区表的值列表中。对于间隔-列表复合分区表,只可以向范围子分区表和已创建存在的间隔子分区表中添加值。如果需要将值添加到尚未被创建的间隔子分区表的分区键值中,则需要修改分区模板。

示例1:添加分区值到一级分区表

下面的例子添加新的元素('B2', 'B3')到已经存在的列表分区表

--  清理环境
DROP TABLE tab;

-- 创建分区表
CREATE TABLE tab 
(
    c1 int, 
    c2 varchar(2)
)
PARTITION BY LIST(c2)
(
    PARTITION p1 VALUES('A1', 'A2'),
    PARTITION p2 VALUES('B1')
);

ALTER TABLE tab
MODIFY PARTITION p2
ADD VALUES ('B2', 'B3');

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

不能添加分区值到DEFAULT子分区表。

使用ALTER TABLE … MODIFY SUBPARTITION … ADD VALUES语句添加分区值到二级子分区表。

示例2:添加分区值到二级分区表

下面的例子扩展二级子分区表p1_sub2分区值

--  清理环境
DROP TABLE tab;

-- 创建分区表
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')
    ),
    PARTITION p2 VALUES LESS THAN(20)
);

ALTER TABLE tab
MODIFY SUBPARTITION p1_sub2
ADD VALUES ('B3');

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

添加的分区值不能已经存在其他二级子分区表中。