oracle 导表结构 不带分区,【Oracle】ORA-14400: 插入的分区关键字未映射到任何分区...

问题描述:

工作中使用kettle将原始库中的数据抽取到标准库中,在抽取过程中报错:【ORA-14400: 插入的分区关键字未映射到任何分区】/【ORA-14400: inserted partition key does not map to any partition】

解决过程:

ORA-14400: 插入的分区关键字未映射到任何分区

ORA-06512: 在 "NMS_FMS.BATCH_SAVE", line 1109

ORA-06512: 在 line 1

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)

at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)

at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:218)

at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:969)

at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1190)

at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370)

at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3476)

at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4400)

at com.mchange.v2.c3p0.impl.NewProxyCallableStatement.execute(NewProxyCallableStatement.java:3044)

经过百度,发现出现ORA-14400是表分区出现问题。

1.确定该表是否已经添加了表分区。

select partition_name,high_value from user_tab_partitions t where table_name='table_name';

2.查询表分区绑定的字段名称。

select * from user_part_key_columns t where name='table_name';

3.查看当前表分区的具体情况

select * from user_tab_partitions t where table_name='table_name';

4.查询表分区绑定的字段的最大值。注:此处的table_name应为当前表对应的原始库中的源表。

select max(key_column) from table_name t;

5.将查询到的表分区绑定字段的最大值插入到当前表中进行测试,发现报错。

insert into table_name(table_column1,table_column2,......,key_column) values(value1,value2,......,key_value);

6.经过以上环节确定源表中出现错误数据,并且由于错误数据的时间跨度大于当前分区的范围,导致ORA-14400错误的出现,但是由于该数据必须保留,因此对表分区进行扩展。

7.扩展当前表分区以保证范围大于绑定字段的最大值。

9beae2706546697381a64e23873c3664.gif

alter table table_name add partition part_key_column_029 values less than (to_date('2029-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN'))

tablespace tablespace_name

pctfree 10

initrans 1

maxtrans255,

......,

alter table table_name add partition part_key_column_049 values less than (to_date('2049-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN'))

tablespace tablespace_name

pctfree 10

initrans 1

maxtrans255,

60b88586b19b5f3803c09c96931b9aca.gif

8.结束。再次使用kettle进行抽取时顺利抽取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值