首批通过分布式安全可靠测评,为关键业务系统打造
创建分区表错误,错误代码 1499/ORA-00600
更新时间:2026-05-21 09:16
创建分区表错误时报 1499/ORA-00600 错误,提示分区数超限。本文介绍该问题的原因以及处理方法。
适用版本
OceanBase 数据库所有版本。
问题现象
建表失败并提示错误。
对于 MySQL 模式,错误信息如下。
ERROR 1499 (HY000): Too many partitions (including subpartitions) were defined
对于 Oracle 模式,错误信息如下。
ORA-00600: internal error code, arguments: -5188, Too many partitions (including subpartitions) were defined
问题原因
根据错误代码,可知错误原因为建表的分区过多,因此查看建表的 SQL 语句,发现错误原因为表的分区数量超过了上限。OBServer 中分区过多后,会导致 Clog 主备 Keep Alive 的 RPC 开销增大、后台遍历分区的定时任务的开销增大、每个分区占用的内存增加、容灾场景下,系统恢复时间变慢。因此 OceanBase 数据库增加了分区表中分区数量的限制。
建表时,应注意以下两个限制条件:
建表语句指定创建的分区数量必须小于等于分区上限。
对于 OceanBase 数据库 V1.X 版本,分区上限为 8192。
对于OceanBase V2.X 及以后的版本中,对于不同的兼容模式,分区表的分区上限如下所示。
兼容模式 分区上限 MySQL 模式 8192 Oracle 模式 65536
整个 OceanBase 集群范围内,每台物理机上的分区总数必须在分区上限以内,各版本的分区上限如下表所示。
版本 每台物理机分区总数上限值 V1.4.5 ~ V1.4.74 80000 V1.4.75 ~ V1.4.76 50000 V2.0 及以后的版本 50000
解决方法
检查回收站中是否存在延迟删除的分区。
obclient> SHOW RECYCLEBIN;如果存在,清理回收站。
obclient> PURGE RECYCLEBIN;如果回收站中的分区数量不足以影响到创建分区表,则可能是因为该物理机上已存在的分区数量达到上限,需要删除部分表或分区,再执行回收站清理。
您可使用 root 用户登录数据库的 sys 租户执行以下命令查看各个 server 上的分区个数分布。
对于 V1.x 版本
obclient> SELECT zone, svr_ip, count(1) cnt FROM __all_meta_table GROUP BY svr_ip ORDER BY zone,cnt desc;对于 V2.x 版本及后续版本
obclient> SELECT zone, svr_ip, count(1) cnt from __all_virtual_meta_table GROUP BY svr_ip ORDER BY zone,cnt desc;清理租户后需等待 1~2 小时,保证已删除的分区资源已回收。
修改建表语句,将分区数量指定为小于等于分区上限。其中
table_name为分区表名称。obclient> DROP TABLE table_name; obclient> PURGE RECYCLEBIN;
暂停租户中 TPS 事务,等待 1~2 小时后内存回收,即可重新创建表。
如果不能暂停 TPS 事务,需考虑租户内存扩容后再进行建表。