分区表的维护主要有增加分区、删除分区、交换分区、合并分区、拆分分区。
1)增加分区:添加一个新的分区
2)删除分区:删除一个就分区
3)交换分区:将分区数据跟普通表交换,2张表结构必须一样。
4)合并分区:将临近的两个分区合并为一个分区,目前仅支持范围分区表的操作
5)拆分分区:将一个分区拆分成临近的两个分区,目前仅支持范围分区表的操作
下面实验是针对下面这张表,先了解一下表的信息
表T_RANGE是一个范围分区表,根据表C列的时间范围分区,创建语法如下图。P1分区有54条,P2分区有50条,其他分区没有数据。
CREATE TABLE t_range ( A INT, B VARCHAR, C DATETIME ) PARTITION BY RANGE(C) ( PARTITION P1 VALUES LESS THAN ('2021-09-01') TABLESPACE "TBS_PARTA", PARTITION P2 VALUES LESS THAN ('2021-10-01') TABLESPACE "TBS_PARTA", PARTITION P3 VALUES LESS THAN ('2021-11-01') TABLESPACE "TBS_PARTB", PARTITION P4 VALUES LESS THAN ('2021-12-01') TABLESPACE "TBS_PARTB", PARTITION P5 VALUES EQU OR LESS THAN(MAXVALUE) TABLESPACE "TBS_PARTB" ); |
1.删除分区
目前只有范围分区和列表分区能够进行删除分区操作,删除分区会更新分区表的信息,不影响分区索引。
但是原分区里面数据就没有了。
2.增加分区
只能对范围分区和列表分区增加分区,对于范围分区,增加分区必须在最后一个范围值的后面增加分区,要想在表的开始范围或者其他分区范围,那就只能使用
拆分分区了。如果分区表有默认分区,那么就需要删除默认分区。
可以看到上图中,因为有默认maxvalue,所以新分区没有添加成功。那么久先删除p5的maxvalue分区,
增加新分区,最后记得再补上p5的maxvalue分区,删除分区数据会跟着删除的,记得备份
3.交换分区
交换分区是用数据字典修改的,所有不涉及IO操作,不会产生大量的REDO和UNDO日志,还是只能对范围分区和列表分区操作。
首先创建一个普通表,insert两条数据,这2条数据对于t_range 分区的P2分区
大家看到了吧。这个表和分区P2交换了数据。 数据都在啊
4.合并分区
合并分区目前只支持范围分区进行合并操作,而且必须是范围相邻的两分区,在生产环境中,合并分区会导致数据的重组和分区索引的重建。时间根据数据大小而变化。
5.拆分分区
拆分分区目前只支持范围分区
附常用SQL文本
CREATE TABLE "SUYS"."PPP_RANGE" ( A INT, B VARCHAR, C DATETIME ) alter table "SUYS"."T_RANGE" drop partition p5; select table_name,partition_name,high_value from all_tab_partitions where table_name='T_RANGE'; alter table "SUYS"."T_RANGE" merge partitions p2,p3 into partition p2_3; alter table "SUYS"."T_RANGE" split partition p2_3 at('2021-10-01 00:00:00') into(partition p2,partition p3); |