【 使用环境 】 单节点 centos7
【 OB or 其他组件 】 ob
【 使用版本 】 ob-ce 4.35
【问题描述】
调用存储过程 例如 CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION(); 虽然提示执行成功,但没有效果,查询 SELECT * FROM oceanbase.DBA_OB_TENANT_EVENT_HISTORY WHERE EVENT = ‘MANAGE_DYNAMIC_PARTITION’
ORDER BY TIMESTAMP DESC ; 发现列FAILED_TABLE_ID_LIST存在失败表,但是没给出错误提示 如何定位问题原因呢?
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
辞霜
2025 年9 月 17 日 10:59
#3
相关表结构和CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION()语句的详细sql提供一下
CREATE TABLE IF NOT EXISTS enc_anon (
`rec_id` bigint(20) ,
`obj_code` varchar(32) ,
`key` bigint
) DYNAMIC_PARTITION_POLICY(
TIME_UNIT = ‘day’,
PRECREATE_TIME = ‘3day’,
BIGINT_PRECISION = ‘s’
) PARTITION BY RANGE(part_key) (
PARTITION p20250917
VALUES LESS THAN(20250918)
); 调用官方提供的 CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION(); 作用是生成动态分区, 出错信息是通过 系统视图 SELECT TIMESTAMP , EVENT , NAME1 , VALUE1 , NAME2 ,VALUE2 FROM oceanbase.DBA_OB_TENANT_EVENT_HISTORY WHERE EVENT = ‘MANAGE_DYNAMIC_PARTITION’
ORDER BY TIMESTAMP DESC ; 查询的
辞霜
2025 年9 月 17 日 17:53
#5
麻烦这个调用DBMS包的命令详细也发一下
CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION();
1操作复现 :
建表之后多次调用 CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION(); 命令 查看分区创建情况 发现 创建到 6145分区就失败了 查询视图 显示了 FAILED_TABLE_ID_LIST 相关的表ID 以及 traceID YB42C0A81FA4-00063EE6E491428C-0-0 但是查询 服务器日志没有找到有用信息
调用说明 动态分区管理任务
手动触发动态分区管理
直接调用 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');
2 官方仓库DBMS_PARTITION 包源码查看
https://github.com/oceanbase/oceanbase/tree/develop/src/share/in…
目录下放的就是 系统内置包(DBMS 包) 的定义脚本。
接着向下找到了 src/pl/sys_package/ob_dbms_partition.cpp src/pl/sys_package/ob_dbms_partition.h src/pl/ob_pl_interface_pragma.h 这三个文件 实现应该是ob_dbms_partition.cpp 这个了