ORA-14300: partitioning key maps to a partition outside maximum permitted number of partitions
Cause: The row inserted had a partitioning key that maps to a partition number greater than 1048575
Action: Ensure that the partitioning key falls within 1048575 partitions or subpartitions.
此错误消息表明,您试图使用超出其允许的最大数目的分区键来分区表或索引。该消息通常指的是您执行操作时试图将一个可分区表拆分成多于4096个分区,或将具有穷举分区策略的可分区索引拆分成多于254个分区的情况。
此消息的官方解释如下:
“ORA-14300:分区法映射到超过最大允许分区数的分区”
此错误也可能暗示你正在尝试通过partition by list方式分区表,但最大值参数大于list中的值数量。
1.确认表最大分区数量以及对应限制:
对于可分区表,Oracle限制最大的分区数量为4096个;
对于有穷举分区策略的可分区索引,Oracle限制最大的分区数量为254个。
2.检查后,表或者索引的分区数是否超过该限制,如果超过了,要重新构建表或者索引,将分区数降至限制值之内。
3.如果想拆分表,则使用alter table xx split partition xx into xx tables … 语句,但在这种情况下,最大分区数限制也可能已被超出。分区优化遵循以下原则:一次分分区不能超过254个,一次性越多越好,尽可能一次性拆成4096个,这样只需要拆分一次可以实现愿望,而不需要反复拆分。
4.使用目录查询工具查询库中表或者索引的分区情况,以确认最大可用分区数。
5.如果能发现有过多的分区存在,就把一些分区合并起来,可以执行alter table xxx merge partitions yy tables 对表进行降分区
6. 检查表或索引是否已经具有拥有足够可用分区,如果是,则可以将其用于partition by list,然后重试操作。
7. 如果仍然不满足需求,只能将表或索引重构成拥有更多分区的范围形式,通常建议使用interval partition 方式对表或者索引进行重构。