背景:

项目测试库出现插入数据显示: ORA-14400: 插入的分区关键字未映射到任何分区 导致无法插入数据.

解决

经过查询得出结论是数据分区表的分区时间过期了,因为分区表我是使用时间来分区的。

具体解决流程:

  1. 查看出现问题表的分区情况。
  2. 确认是分区表时间过期了
  3. 增加分区表的时间分区

扩展

以下是详细的脚本包含:

分区表的创建,查看,删除分区,增加分区…..


-- 查看当前用户的缺省表空间名称
select username,default_tablespace from user_users;
select * from user_users;

-- 例一:假设有一个CUSTOMER表,表中有数据200000行,我们将此表通过CUSTOMER_ID进行分区,每个分区存储100000行,
-- 我们将每个分区保存到单独的表空间中,这样数据文件就可以跨越多个物理磁盘。下面是创建表和分区的代码,如下:
CREATE TABLE ORDER_ACTIVITIES
(
CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR2(30) NOT NULL,
LAST_NAME VARCHAR2(30) NOT NULL,
PHONEVARCHAR2(15) NOT NULL,
EMAILVARCHAR2(80),
STATUS CHAR(1)
)
PARTITION BY RANGE (CUSTOMER_ID)
(
PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE USERS,
PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE USERS2 
)

--创建表ORDER_ACTIVITIES按时间分表
CREATE TABLE ORDER_ACTIVITIES
(
ORDER_ID NUMBER(7) NOT NULL,
ORDER_DATE DATE,
TOTAL_AMOUNT NUMBER,
CUSTOTMER_ID NUMBER(7),
PAID CHAR(1)
)
PARTITION BY RANGE (ORDER_DATE)
(
PARTITION ORD_ACT_PART02 VALUES LESS THAN ('2020-01-01 00:00:00') TABLESPACE USERS
)

-- 以上是常用的分区方法 还有其他分区方法。

-- select * from ORDER_ACTIVITIES

-- 手动给表加分区(没有分区的表后期不能直接分区)
-- 可以解决问题(ORA-14400: 插入的分区关键字未映射到任何分区)
alter table ORDER_ACTIVITIES add PARTITION ORD_ACT_PART01 values less than('2020-02-01 00:00:00') tablespace USERS;

--删除分区表一个分区的数据是
alter table ORDER_ACTIVITIES truncate partition ORD_ACT_PART02;
commit;

--删除分区表某个分区
ALTER TABLE ORDER_ACTIVITIES DROP PARTITION ORD_ACT_PART02;
commit;

-- 查看表分区情况
select *
from user_tab_partitions t
where t.table_name = 'ORDER_ACTIVITIES';