时间
2023-12-01
问题描述
多个集团客户项目实施运维组同事集体反馈,服务报错了,报错日志包含如下内容:
0RA-14400: 插入的分区关键字未映射到任何分区
第一反应就是:应该是分区过期,于是指导运维进行如下步骤排查,确实如此!
查询哪些表做了分区
SELECT * FROM USER_TAB_PARTITIONS
查出所有做了分区的表名称
SELECT DISTINCT TABLE_NAME FROM USER_TAB_PARTITIONS
查看分区表名称及其对应表空间名称
SELECT DISTINCT TABLE_NAME,TABLESPACE_NAME FROM USER_TAB_PARTITIONS
查询指定表是否建了分区
SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME=‘KPGL_XXFP’
查询指定表分区情况
SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME=‘KPGL_XXFP’ ORDER BY partition_name DESC
以此判断是否是手动分区,确认是否需要扩展分区,做到这一步,确认了最大分区是p2312,less than 2023-12-01,确认是分区不够,需要扩展分区。
同时,这个查询里面,能拿到 tablespace_name,在下面的扩建分区脚本需要用到。
扩建分区脚本
ALTER TABLE “表名称” ADD PARTITION “分区名称” VALUES LESS THAN (TO_DATE(‘2024-02-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIAN’)) TABLESPACE “表空间名称”;
其中把中文的地方替换成自己真实环境的对应名称,就可以为表添加一个分区,按照日期分区,此分区存储的是2024年1月的数据!
删除指定分区
ALTER TABLE “表名称” DROP PARTITION “分区名称”;
查询分区数据
select * from “表名称” PARTITION(“分区名称”)
通常要删除分区之前,要查看分区是否已经有数据,没有数据才可以删除分区。




