Oracle导入db2报错,oracle 12c数据泵导入报错KUP-11014错误解决办法

本文介绍了一个从Oracle 10g向12c迁移数据时遇到的错误KUP-11014,并给出了详细的测试案例及解决办法。此错误与多个dump文件导入和access_method的选择有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将10.2.0.5的一个大表导入到12.1.0.2的时候,

导出参数是:

[oracle10g@testdb tmp]$ cat expdp.par

userid='/ as sysdba'

DIRECTORY=DUMPDIR

dumpfile=mytable_%U.dmp

tables=schema.mytable

logfile=mytable.log

job_name=mytable

parallel=8

filesize=100M

导入参数是:

userid='/ as sysdba'

DIRECTORY=DUMPDIR

dumpfile=mytable_%U.dmp

tables=schema.mytable

logfile=mytable.log

job_name=mytable

parallel=8

content=data_only

报错KUP-11014。

ORA-31693: Table data object "SCHEMA"."MYTABLE" failed to load/unload and is being skipped due to error:

ORA-29913: error in executing ODCIEXTTABLEOPEN callout

ORA-29400: data cartridge error

KUP-11011: the following file is not valid for this load operation

KUP-11014: internal metadata in file /home/oracle12c/mytable_02.dmp is not valid

Job "SYS"."MYTABLE" completed with 1 error(s) at Thu May 19 12:55:34 2016 elapsed 0 00:10:03

同样文件导入到11g中没有报错。这是因为12c中一个Bug 20690515引起的(可以详见Doc ID 20690515.8)。

下面我对这个bug稍微解释一下:

1. 触发条件:

在导入多个dump file set(即多个dump file文件)的时候,数据泵如果使用access_method=external_table的方式进行导入(默认情况下12c的access_method值是AUTOMATIC,即自动选择是extenal_table还是direct_path。至于什么时候选择前者什么时候选择后者,可参考Doc ID552424.1),用external_table方式导入期间,会校验每个dump file的xml内容,且与第一个dump file的xml内容做对比。但导入10.x的dump file set的时候,第一个(作为参考的那个)dump file的xml格式被转换成11.1的格式,那么与后面的dump file文件做对比校验的时候,就失败了。

2. 受影响版本:

12.1.0.2

3. 修复版本:

12.2

4. 是否有patch:

有,Patch 20690515 已经存在,有基于12.1.0.2版本的linux x86-64平台,aix平台和solaris SPARC平台。目前linux平台已经下载次数200多。

5. 是否有workaround:

有workaround,设置access_method=direct_path

如果还是报错,再加上table_exists_action=replace

就我来看,这个bug触发需要满足2个条件:

1. 多个dump文件

2. access method自动走了external table,或者强制手工指定了ACCESS_METHOD=EXTERNAL_TABLE。

(3. 可能还和表的大小有关,在某环境测试时300多M的一个表故障不重现,但是增加数据到3.6G,再次测试故障重现。但是目前在mos中没有说明表大小的影响因素。)

我在我的虚拟机测试环境中用来一个500多M的表,分别导成一个大文件和6个小文件:

创建测试表,create table test_dmp as select * from dba_objects;

多次insert into test_dmp as select * from test_dmp; 直到数据大约200多万行,500多M的segment size。

然后导出成一个大文件和多个小文件。

[oracle12c@testdb2 dump_12c]$ ls -l

total 889504

-rw-r-----. 1 oracle12c oinstall 455401472 May 19 16:01 bigdump.dmp <==单个大文件

-rw-r--r--. 1 oracle12c oinstall       173 May 19 16:56 impdp2.par

-rw-r--r--. 1 oracle12c oinstall       145 May 19 17:19 impdp3.par

-rw-r--r--. 1 oracle12c oinstall       171 May 19 17:08 impdp.par

-rw-r-----. 1 oracle12c oinstall 104857600 May 19 15:52 mydump_01.dmp <==多个小文件

-rw-r-----. 1 oracle12c oinstall 104857600 May 19 15:52 mydump_02.dmp

-rw-r-----. 1 oracle12c oinstall 104857600 May 19 15:52 mydump_03.dmp

-rw-r-----. 1 oracle12c oinstall 104857600 May 19 15:52 mydump_04.dmp

-rw-r-----. 1 oracle12c oinstall  34873344 May 19 15:52 mydump_05.dmp

-rw-r-----. 1 oracle12c oinstall   1118208 May 19 15:52 mydump_06.dmp

-rw-r-----. 1 oracle12c oinstall       677 May 19 17:20 mydump.log

[oracle12c@testdb2 dump_12c]$

1. 测试导入一个大文件,且强制使用ACCESS_METHOD=EXTERNAL_TABLE,不会报错:

[oracle12c@testdb2 dump_12c]$ cat impdp2.par

userid='/ as sysdba'

DIRECTORY=MYDIR

dumpfile=bigdump.dmp

tables=test.test_dmp

logfile=mydump.log

job_name=mydump

parallel=2

content=data_only

ACCESS_METHOD=EXTERNAL_TABLE

[oracle12c@testdb2 dump_12c]$

[oracle12c@testdb2 dump_12c]$

[oracle12c@testdb2 dump_12c]$

[oracle12c@testdb2 dump_12c]$

[oracle12c@testdb2 dump_12c]$ impdp parfile=impdp2.par

Import: Release 12.1.0.2.0 - Production on Thu May 19 16:57:08 2016

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

Master table "SYS"."MYDUMP" successfully loaded/unloaded

Starting "SYS"."MYDUMP":  /******** AS SYSDBA parfile=impdp2.par

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

. . imported "TEST"."TEST_DMP"                           434.2 MB 5132800 rows

Job "SYS"."MYDUMP" successfully completed at Thu May 19 16:57:26 2016 elapsed 0 00:00:17

[oracle12c@testdb2 dump_12c]$

2. 测试导入多个文件,且强制使用ACCESS_METHOD=EXTERNAL_TABLE,就报错了:

[oracle12c@testdb2 dump_12c]$ cat impdp.par

userid='/ as sysdba'

DIRECTORY=MYDIR

dumpfile=mydump_%U.dmp

tables=test.test_dmp

logfile=mydump.log

job_name=mydump

parallel=2

content=data_only

ACCESS_METHOD=EXTERNAL_TABLE

[oracle12c@testdb2 dump_12c]$

[oracle12c@testdb2 dump_12c]$ impdp parfile=impdp.par

Import: Release 12.1.0.2.0 - Production on Thu May 19 16:55:30 2016

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

Master table "SYS"."MYDUMP" successfully loaded/unloaded

Starting "SYS"."MYDUMP":  /******** AS SYSDBA parfile=impdp.par

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

ORA-31693: Table data object "TEST"."TEST_DMP" failed to load/unload and is being skipped due to error:

ORA-29913: error in executing ODCIEXTTABLEOPEN callout

ORA-29400: data cartridge error

KUP-11011: the following file is not valid for this load operation

KUP-11014: internal metadata in file /tmp/dump_12c/mydump_02.dmp is not valid

Job "SYS"."MYDUMP" completed with 1 error(s) at Thu May 19 16:55:34 2016 elapsed 0 00:00:03

[oracle12c@testdb2 dump_12c]$

3. 测试导入多个文件,且强制使用ACCESS_METHOD=DIRECT_PATH,也不会报错:

[oracle12c@testdb2 dump_12c]$ cat impdp.par

userid='/ as sysdba'

DIRECTORY=MYDIR

dumpfile=mydump_%U.dmp

tables=test.test_dmp

logfile=mydump.log

job_name=mydump

parallel=2

content=data_only

ACCESS_METHOD=DIRECT_PATH

[oracle12c@testdb2 dump_12c]$ impdp parfile=impdp.par

Import: Release 12.1.0.2.0 - Production on Thu May 19 17:08:12 2016

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

Master table "SYS"."MYDUMP" successfully loaded/unloaded

Starting "SYS"."MYDUMP":  /******** AS SYSDBA parfile=impdp.par

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

. . imported "TEST"."TEST_DMP"                           434.2 MB 5132800 rows

Job "SYS"."MYDUMP" successfully completed at Thu May 19 17:08:31 2016 elapsed 0 00:00:17

[oracle12c@testdb2 dump_12c]$

注:以上测试是在从10.2.0.5导出,导入到12.1.0.2;如果从11.2导入到12.1.0.2,也不会有这个问题。考虑到可能有不少用户会从10g升级到12c,建议打上这个bug的补丁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值