首批通过分布式安全可靠测评,为关键业务系统打造
修改分区规则
更新时间:2025-11-04 10:51:26
表创建成功后,您可以根据业务需要,修改表的分区方式、分区类型和分区键。
修改分区方式
OceanBase 数据库的 Oracle 模式支持修改表的分区方式,分区方式转换的支持情况如下表所示。
| 分区方式 | 非分区 | 一级分区 | 二级分区 |
|---|---|---|---|
| 非分区 | - | 支持 | 支持 |
| 一级分区 | 不支持 | - | 不支持 |
| 二级分区 | 不支持 | 不支持 | - |
非分区表转化为一级分区表
您可以通过 ALTER TABLE 语句将非分区表转化为任意分区类型的一级分区表,SQL 语法格式如下:
ALTER TABLE table_name MODIFY PARTITION BY partition_option;
partition_option:
range_partition_option
| list_partition_option
| hash_partition_option
range_partition_option:
RANGE (column_name)
(PARTITION partition_name VALUES LESS THAN(expr)
[, PARTITION partition_name VALUES LESS THAN (expr) ...]
[, PARTITION partition_name VALUES LESS THAN (MAXVALUE)]
)
list_partition_option:
LIST (expr(column_name) | column_name)
(PARTITION partition_name VALUES ( v01 [, v0N])
[, PARTITION partition_name VALUES ( vN1 [, vNN]) ...]
[, PARTITION partition_name VALUES (DEFAULT)]
)
hash_partition_option:
HASH (expr(column_name) | column_name) PARTITIONS partition_count
参数说明:
table_name:待修改的非分区表的表名。column_name:指定待分区的列的列名。partition_count:指定分区个数。
有关修改表语法的详细参数说明信息,参见 ALTER TABLE。
示例如下:
创建非分区表 tbl1 后,转换为 Hash 类型的一级分区表。
创建非分区表
tbl1。obclient> CREATE TABLE tbl1(col1 INT, col2 DATE, PRIMARY KEY(col1, col2));将非分区表
tbl1转化为一级分区表。obclient> ALTER TABLE tbl1 MODIFY PARTITION BY HASH(col1) PARTITIONS 4;
非分区表转化为二级分区表
您可以将非分区表转换为任意分区类型的模板化或非模板化二级分区表。
将非分区表转换为模板化二级分区表的 SQL 语法如下:
ALTER TABLE table_name MODIFY PARTITION BY partition_option;
partition_option:
RANGE(column_name) subpartition_option (range_partition_option)
| LIST(expr(column_name) | column_name) subpartition_option (list_partition_option)
| HASH(expr(column_name) | column_name) {(hash_partition_option)
| PARTITIONS partition_count}
subpartition_option:
SUBPARTITION BY
RANGE(column_name) SUBPARTITION TEMPLATE(range_subpartition_option)
| LIST(expr(column_name) | column_name) SUBPARTITION TEMPLATE(list_subpartition_option)
| HASH(expr(column_name) | column_name) {SUBPARTITION TEMPLATE (hash_subpartition_option)
| SUBPARTITIONS subpartition_count}
range_partition_option:
PARTITION partition_name VALUES LESS THAN(expr)
[, PARTITION partition_name VALUES LESS THAN(expr) ...]
[, PARTITION partition_name VALUES LESS THAN(MAXVALUE)]
range_subpartition_option:
SUBPARTITION subpartition_name VALUES LESS THAN(expr)
[, SUBPARTITION subpartition_name VALUES LESS THAN(expr) ...]
[, SUBPARTITION subpartition_name VALUES LESS THAN(MAXVALUE)]
list_partition_option:
PARTITION partition_name VALUES( v01 [, v0N])
[, PARTITION partition_name VALUES( vN1 [, vNN]) ...]
[, PARTITION partition_name VALUES(DEFAULT)]
list_subpartition_option:
SUBPARTITION subpartition_name VALUES(expr)
[, SUBPARTITION subpartition_name VALUES(expr) ...]
hash_partition_option:
PARTITION partition_name
[, PARTITION partition_name ...]
hash_subpartition_option:
SUBPARTITION subpartition_name
[, SUBPARTITION subpartition_name ...]
将非分区表转化为非模板化二级分区表的 SQL 语法如下:
ALTER TABLE table_name MODIFY PARTITION BY partition_option;
partition_option:
RANGE(column_name) subpartition_option
{range_partition_option (subpartition_option_list)
[, range_partition_option (subpartition_option_list) ...]
}
| LIST(expr(column_name) | column_name) subpartition_option
{list_partition_option (subpartition_option_list)
[, list_partition_option (subpartition_option_list) ...]
}
| HASH(expr(column_name) | column_name) subpartition_option
{hash_partition_option (subpartition_option_list)
[, hash_partition_option (subpartition_option_list) ...]
}
subpartition_option:
SUBPARTITION BY
RANGE(column_name)
| LIST(expr(column_name) | column_name)
| HASH(expr(column_name) | column_name)
range_partition_option:
PARTITION partition_name VALUES LESS THAN(expr)
list_partition_option:
PARTITION partition_name VALUES(expr)
hash_partition_option:
PARTITION partition_name
subpartition_option_list:
range_subpartition_option
| list_subpartition_option
| hash_subpartition_option
range_subpartition_option:
SUBPARTITION subpartition_name VALUES LESS THAN(expr)
[, SUBPARTITION subpartition_name VALUES LESS THAN(expr) ...]
list_subpartition_option:
SUBPARTITION subpartition_name VALUES(expr)
[, SUBPARTITION subpartition_name VALUES(expr) ...]
hash_subpartition_option:
SUBPARTITION subpartition_name
[, SUBPARTITION subpartition_name ...]
有关修改表语法的详细参数说明信息,参见 ALTER TABLE。
示例如下:
创建非分区表 tbl2 后,转换为 Hash + Range 分区的模板化二级分区表。
创建非分区表
tbl2。obclient> CREATE TABLE tbl2(col1 INT, col2 DATE, PRIMARY KEY(col1, col2));将非分区表
tbl2转化为 Hash+ Range 类型的模板化二级分区表。obclient> ALTER TABLE tbl2 MODIFY PARTITION BY HASH(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE( SUBPARTITION p1 VALUES LESS THAN ('10-OCT-2016'), SUBPARTITION p2 VALUES LESS THAN ('30-MAR-2116') ) PARTITIONS 2;
修改分区类型
OceanBase 数据库的 Oracle 模式暂不支持修改分区表的分区类型。
修改分区键
OceanBase 数据库的 Oracle 模式暂不支持修改分区表的分区键。