首批通过分布式安全可靠测评,为关键业务系统打造
修改动态分区表
更新时间:2026-06-26 15:45:26
OceanBase 数据库可以通过修改 DYNAMIC_PARTITION_POLICY 块,修改表的动态分区管理属性。
本文将向您介绍如何使用 SQL 语句修改动态分区表。
使用限制及注意事项
修改动态分区管理参数后,预创建分区和删除过期分区不会立刻生效,需要等待下一次动态分区管理任务自动调度,或者手动调度一次动态分区管理任务。调度动态分区管理任务的详细介绍,参见 动态分区管理任务。
权限要求
修改动态分区表需要有 ALTER 权限。更多有关 OceanBase 数据库权限的详细介绍,参见 Oracle 模式下的权限分类。
语法
创建动态分区表的 SQL 语句格式如下:
ALTER TABLE table_name [SET] DYNAMIC_PARTITION_POLICY [=] (dynamic_partition_policy_list);
dynamic_partition_policy_list:
dynamic_partition_policy_option [, dynamic_partition_policy_option ...]
dynamic_partition_policy_option:
ENABLE = {true | false}
| PRECREATE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
| EXPIRE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
动态分区管理属性参数说明
| 属性名称 | 描述 | 是否必填 | 是否可修改 |
|---|---|---|---|
| ENABLE | 表示是否启用动态分区管理。取值如下:
|
否 | 是 |
| PRECREATE_TIME | 表示预创建时间。调度一次动态分区管理,会预创建分区使得 最大分区上界 > now() + precreate_time。取值如下:
说明
|
否 | 是 |
| EXPIRE_TIME | 表示分区过期时间。调度一次动态分区管理,会删除所有 分区上界 < now() - expire_time 的过期分区。取值如下:
|
否 | 是 |
更多有关修改表语法的详细参数说明信息,参见 ALTER TABLE。
示例
查看表
test_tbl1的动态分区信息。SELECT * FROM sys.DBA_OB_DYNAMIC_PARTITION_TABLES WHERE TABLE_NAME = 'TEST_TBL1';查询结果如下:
+---------------+------------+----------+----------------------------------------+--------+-----------+----------------+-------------+-----------+------------------+ | DATABASE_NAME | TABLE_NAME | TABLE_ID | MAX_HIGH_BOUND_VAL | ENABLE | TIME_UNIT | PRECREATE_TIME | EXPIRE_TIME | TIME_ZONE | BIGINT_PRECISION | +---------------+------------+----------+----------------------------------------+--------+-----------+----------------+-------------+-----------+------------------+ | SYS | TEST_TBL1 | 507940 | Timestamp '2024-11-11 13:30:00.000000' | TRUE | HOUR | 3HOUR | 1DAY | +8:00 | NONE | +---------------+------------+----------+----------------------------------------+--------+-----------+----------------+-------------+-----------+------------------+ 1 row in set修改动态分区表
test_tbl1,设置动态分区属性为:- 预创建当前时间之后的 1 天内的分区。
- 分区永不过期。
ALTER TABLE test_tbl1 DYNAMIC_PARTITION_POLICY( ENABLE = true, PRECREATE_TIME = '1 day', EXPIRE_TIME = '-1' );再次查看表
test_tbl1的动态分区信息。SELECT * FROM sys.DBA_OB_DYNAMIC_PARTITION_TABLES WHERE TABLE_NAME = 'TEST_TBL1';查询结果如下:
+---------------+------------+----------+----------------------------------------+--------+-----------+----------------+-------------+-----------+------------------+ | DATABASE_NAME | TABLE_NAME | TABLE_ID | MAX_HIGH_BOUND_VAL | ENABLE | TIME_UNIT | PRECREATE_TIME | EXPIRE_TIME | TIME_ZONE | BIGINT_PRECISION | +---------------+------------+----------+----------------------------------------+--------+-----------+----------------+-------------+-----------+------------------+ | SYS | TEST_TBL1 | 507940 | Timestamp '2024-11-11 13:30:00.000000' | TRUE | HOUR | 1DAY | -1 | +8:00 | NONE | +---------------+------------+----------+----------------------------------------+--------+-----------+----------------+-------------+-----------+------------------+ 1 row in set说明
修改动态分区管理参数后,预创建分区和删除过期分区不会立刻生效,需要等待下一次动态分区管理任务自动调度,或者手动调度一次动态分区管理任务。详细介绍,参见 动态分区管理任务。