oracle数据库IMP-00010错误解决

前端之家收集整理的这篇文章主要介绍了oracle数据库IMP-00010错误解决前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载自:http://www.linuxidc.com/Linux/2015-09/123014.htm

问题出现的场景

笔者源数据库是11gR2,需要将一个演示数据schema导入到另一台服务器上。由于时间比较久了,已经忘记目标数据库的版本号。笔者想当然以为应该是11gR2的Oracle,于是采用Exp工具导出。

出于简单习惯,笔者选择在服务器上执行exp命令,这样导出数据库和客户端均是11gR2。

错误具体信息

等到导入数据的时候,出现了问题。

执行语句:

D:\DDD>imp \"/ as sysdba\" file=DDD_TESTING_20150901_exp.dmp fromuser=ddd_testing touser=ddd_testing

执行后的错误信息:

Import: Release 10.2.0.1.0 - Production on Wed Sep 2 22:36:31 2015

Copyright (c) 1982,2005,Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Produc tion With the Partitioning,OLAP and Data Mining options IMP-00010: not a valid export file,header Failed verification IMP-00000: Import terminated unsuccessfully

错误分析

文件头不能识别,一般来说这种问题有两种可能:一种是文件出现坏块,在从FTP下载或者拷贝复制的过程中出现问题。另一种是版本兼容问题。

如果是第一种问题,理论上是没有其他办法,只能重新导出或者下载dmp文件。如果是兼容版本问题,需要检查一下目标数据库和导入客户端情况。

执行语句:

sql> select * from v$version;

打印信息:

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/sql Release 10.2.0.1.0 - Production

CORE    10.2.0.1.0    Production

TNS for 32-bit Windows: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 – Production

导入目标是10g,而且客户端也是10gR2。这就出现了兼容性问题,低版本客户端“被认为”不能解析理解高版本客户端生成文件,所以才会报错拒绝导入。显示信息是文件头验证不通过。

解决方法

笔者这时候基本没有别的选择。只能是回去重新用低版本客户端导出数据内容,或者选择Data Pump进行version调整的处理。但是在网络上,笔者找到了一种看似合理的处理方法

Exp/Imp版本不兼容的现象,本质上是Oracle对于Dmp文件内容的限制。因为,Oracle担心低版本的Imp程序,不能理解高版本Dmp文件里面的内容生成对象,所以才会有限制。笔者Dmp包里面只有数据表和一些普通索引对象,“高级”对象一个没有,这种限制其实没有意义。

那么,只需要将文件头稍做修改,让10gR2低版本客户端能够“认可”Dmp文件也就好了。根据这个思路,从网络上下载了notepad++编辑程序,直接打开Dmp文件。注意:这个过程其实有风险的,将近似二进制文件的Dmp以文本格式打开,要有一定心理准备。

打开文件后,可以看到文件头部信息,明显标注着Dmp文件版本11gR2内容

将其修改为10gR2适应编号V10.02.01,之后保存。

保存后调用相同导入程序命令,导入正常开始。

总结

笔者的处理方法,其实是有很大风险和隐患的。放在平时测试环境中,一时选择失误的补救策略还是可以接受的。如果是正式环境,一定要根据规范进行操作,通过实现测试预判问题风险,设计解决方案,务必保证所有对象能够顺利导入。

另外,笔者这种方法其实是违背Oracle原则的,如果笔者dmp文件中存在一些新特性对象,或者版本差异很大,也不能保证导入操作的顺利。

猜你在找的Oracle相关文章