首批通过分布式安全可靠测评,为关键业务系统打造
手动分区分裂
更新时间:2026-03-03 15:47:32
OceanBase 数据库支持在分区表中手动进行分区分裂操作,即将一个已有的分区拆分为多个分区。这个功能可以指定需要分裂的分区和新分区的分裂位点进行手动执行分区分裂命令,根据需求和数据增长情况对分区进行调整。
手动分区分裂操作的支持情况
当前版本仅支持对 Range/Range Columns 分区的一级分区表进行手动分区分裂操作,且只支持一个分区分裂成多个分区。
使用限制及注意事项
- 不支持手动分裂 List、Hash 分区表。
- 不支持手动分裂二级分区表。
- 不支持被手动分裂的表的分区键与主键前缀不一样。
- 不支持无主键表的手动分区分裂。
- 不支持列存表的手动分区分裂。
- 不支持列存副本的手动分区分裂。
- 如果表所在的
TABLEGROUP(表组)里面包含了多张表时,不支持手动分区分裂;如果这个TABLEGROUP中只有这张表,则支持手动分区分裂。 - 不支持物化视图的手动分区分裂。
- 不支持全局索引的手动分裂。
- 不支持全文索引的手动分裂。
- 不支持空间索引的手动分裂。
- 不支持向量索引的手动分区分裂。
- 不支持单独分裂局部索引、LOB 表的分区。
手动分区分裂语法
ALTER TABLE table_name REORGANIZE PARTITION partition_name INTO (
PARTITION split_partition_name VALUES LESS THAN (value)
[, PARTITION split_partition_name VALUES LESS THAN (value) ...]
, PARTITION split_partition_name VALUES LESS THAN (source_value));
参数解释
| 参数 | 说明 |
|---|---|
| table_name | 指定表名。 |
| partition_name | 指定待分裂的分区名称。 |
| split_partition_name | 指定分裂出的新分区名称。 |
| value | 指定分区分裂的界限(取值范围)。
注意手动分裂 Range 分区时,必须保证分区 |
| source_value | 指定待分裂分区原始界限(取值范围)。即最后一个分区分裂的定义,其 value 等同于原分区的 value。 |
示例
创建 Range 分区的一级分区表 test_tbl1。
CREATE TABLE test_tbl1(col1 INT, col2 INT, PRIMARY KEY(col1))
PARTITION BY RANGE(col1)
(PARTITION p0 VALUES LESS THAN(100),
PARTITION p1 VALUES LESS THAN(200),
PARTITION p2 VALUES LESS THAN(300),
PARTITION p_max VALUES LESS THAN (MAXVALUE));
把
test_tbl1表的分区p0分裂成三个新的分区,分裂的位置是在30和60这两个值所对应的行上。分裂后,原来的分区p0被分成三个新的分区p0_1、p0_2和p0。ALTER TABLE test_tbl1 REORGANIZE PARTITION p0 INTO ( PARTITION p0_1 VALUES LESS THAN (30), PARTITION p0_2 VALUES LESS THAN (60), PARTITION p0 VALUES LESS THAN (100));把
test_tbl1表的分区p_max分裂成三个新的分区,分裂的位置是在400和500这两个值所对应的行上。分裂后,原来的分区p_max被分成三个新的分区p_max_1、p_max_2和p_max_3。ALTER TABLE test_tbl1 REORGANIZE PARTITION p_max INTO ( PARTITION p_max_1 VALUES LESS THAN (400), PARTITION p_max_2 VALUES LESS THAN (500), PARTITION p_max_3 VALUES LESS THAN (MAXVALUE));查看表
test_tbl1的结构和定义。SHOW CREATE TABLE test_tbl1;返回结果如下:
+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | test_tbl1 | CREATE TABLE `test_tbl1` ( `col1` int(11) NOT NULL, `col2` int(11) DEFAULT NULL, PRIMARY KEY (`col1`) ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 partition by range(col1) size ('128MB') (partition `p0_1` values less than (30), partition `p0_2` values less than (60), partition `p0` values less than (100), partition `p1` values less than (200), partition `p2` values less than (300), partition `p_max_1` values less than (400), partition `p_max_2` values less than (500), partition `p_max_3` values less than (MAXVALUE)) | +-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set