首批通过分布式安全可靠测评,为关键业务系统打造
动态分区管理任务
更新时间:2026-04-04 09:51:12
OceanBase 数据库动态分区管理新增系统包 DBMS_PARTITION,提供触发动态分区管理的子程序 MANAGE_DYNAMIC_PARTITION()。
定时触发动态分区管理
动态分区管理任务基于 PL 系统包 DBMS_SCHEDULER 定时触发,在用户租户创建时内置定时动态分区管理任务 SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY 和 SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY,定期调用 DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION()。
SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY调度TIME_UNIT为hour的动态分区管理,每个整点调度一次,调度时间不可修改。SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY调度TIME_UNIT为day、week、month、year的动态分区管理,每天调度一次,默认为 0 点调度。用户可修改调度时间,避开 DDL 业务高峰期。
定时动态分区管理任务查询
可以在用户租户下,通过 oceanbase.DBA_SCHEDULER_JOBS 视图指定 JOB_NAME 为 SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY 或 SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY 查看定时动态分区管理任务。
示例如下:
指定
JOB_NAME为SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY。SELECT JOB_NAME, JOB_ACTION, START_DATE, REPEAT_INTERVAL, ENABLED, NEXT_RUN_DATE, MAX_RUN_DURATION, COMMENTS FROM oceanbase.DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY'\G返回结果如下:
*************************** 1. row *************************** JOB_NAME: SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY JOB_ACTION: DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION(null, 'DAY,WEEK,MONTH,YEAR') START_DATE: 2025-04-16 00:00:00.000000 REPEAT_INTERVAL: FREQ=DAILY;INTERVAL=1 ENABLED: 1 NEXT_RUN_DATE: 2025-04-17 00:00:00.000000 MAX_RUN_DURATION: 3600 COMMENTS: used to perform manage dynamic partition periodically 1 row in set指定
JOB_NAME为SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY。SELECT JOB_NAME, JOB_ACTION, START_DATE, REPEAT_INTERVAL, ENABLED, NEXT_RUN_DATE, MAX_RUN_DURATION, COMMENTS FROM oceanbase.DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY'\G返回结果如下:
*************************** 1. row *************************** JOB_NAME: SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY JOB_ACTION: DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION(null, 'HOUR') START_DATE: 2025-04-15 15:00:00.000000 REPEAT_INTERVAL: FREQ=HOURLY;INTERVAL=1 ENABLED: 1 NEXT_RUN_DATE: 2025-04-16 18:00:00.000000 MAX_RUN_DURATION: 3600 COMMENTS: used to perform manage dynamic partition periodically 1 row in set
定时动态分区管理任务修改
可在用户租户下修改当前租户的定时动态分区管理任务。
禁用定时分区管理任务
CALL DBMS_SCHEDULER.DISABLE('SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY');
CALL DBMS_SCHEDULER.DISABLE('SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY');
启用定时分区管理任务
CALL DBMS_SCHEDULER.ENABLE('SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY');
CALL DBMS_SCHEDULER.ENABLE('SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY');
修改定时分区管理任务每日调度时间
仅可修改 SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY 定时任务的每日调度时间。例如,假设当前时间为 2025-03-11 10:00:00,希望将调度时间改为每日的 12 点:
CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY', 'START_DATE', '2025-03-11 12:00:00');
下次调度时间为 2025-03-11 12:00:00,后续每天 12 点调度。
手动触发动态分区管理
直接调用 DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION() 即可触发一次动态分区管理任务:
CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION();
MANAGE_DYNAMIC_PARTITION 有两个参数:precreate_time 和 time_unit。详细介绍信息,参见 MANAGE_DYNAMIC_PARTITION。
指定
precreate_time时,将取指定值和表上precreate_time中的较大值进行预创建分区。示例如下:CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION('3DAY');指定
time_unit时,仅表的time_unit与指定time_unit匹配时,才会进行动态分区管理。示例如下:CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION(NULL, 'day, week');
动态分区管理任务历史执行记录查询
视图 oceanbase.DBA_OB_TENANT_EVENT_HISTORY 中记录当前租户下动态分区管理任务的历史执行情况,包含执行成功和失败的 table id 信息:
SELECT * FROM oceanbase.DBA_OB_TENANT_EVENT_HISTORY
WHERE EVENT = 'MANAGE_DYNAMIC_PARTITION';
返回结果如下:
+----------------------------+----------------+--------------------------+-----------------------+--------------------------+----------------------+--------+-------+--------+-------+--------+-------+--------+-------+--------+------------+----------------+----------+-----------------------------------+-----------+----------+-----------+
| TIMESTAMP | MODULE | EVENT | NAME1 | VALUE1 | NAME2 | VALUE2 | NAME3 | VALUE3 | NAME4 | VALUE4 | NAME5 | VALUE5 | NAME6 | VALUE6 | EXTRA_INFO | SVR_IP | SVR_PORT | TRACE_ID | COST_TIME | RET_CODE | ERROR_MSG |
+----------------------------+----------------+--------------------------+-----------------------+--------------------------+----------------------+--------+-------+--------+-------+--------+-------+--------+-------+--------+------------+----------------+----------+-----------------------------------+-----------+----------+-----------+
| 2025-04-15 16:00:02.292861 | DBMS_PARTITION | MANAGE_DYNAMIC_PARTITION | SUCCESS_TABLE_ID_LIST | [500003] | FAILED_TABLE_ID_LIST | [] | NULL | | NULL | | NULL | | NULL | | NULL | xxx.xx.xxx.xxx | 2882 | YB42AC1E87C3-000632CB941BC66D-0-0 | 2277933 | 0 | NULL |
+----------------------------+----------------+--------------------------+-----------------------+--------------------------+----------------------+--------+-------+--------+-------+--------+-------+--------+-------+--------+------------+----------------+----------+-----------------------------------+-----------+----------+-----------+
1 rows in set