dmp文件损坏了该怎么办

作者介绍:裴征峰,现就职于北京海天起点,专家组成员,南京办事处负责人,持有OCP 10g、OCP 11g、OCM 11g证书,主要从事客户的现场维护,重大问题的解决,数据库性能分析,服务质量保证等工作。拥有超过八年的Oracle服务经验,具备丰富的行业服务背景,对Oracle数据库有深刻的理解,在Oracle数据库RAC以及高可用解决方案方面具有深厚的实践经验,擅长数据库故障诊断,数据库性能调优。

介绍

在某些情况下,如果没有RMAN物理备份,只有逻辑的exp备份,但是在需要进行恢复时,发现dmp文件又损坏了,这个时侯通常是比较麻烦的,因为imp时碰到dmp文件中损坏的部分就停止了,可能dmp文件的后面的部分数据还是好的,但是无法导入。

针对这样的极端情况,Oracle DUL可以支持直接读取dmp文件为sqlldr文件,再进行导入。针对这个问题,我们可以做一些测试。

故障模拟

准备测试数据

导出数据

破坏dmp文件

破坏dmp文件,我们就可以直接使用dd了,这里将dmp文件的头1KB破坏掉,并后不截断dmp文件的后续内容,也就是说,这个dmp文件只有前1KB是损坏的,后面的数据全部正确。

测试导入

这里dmp文件的文件头损坏了,使用imp导入肯定是报错的,所有数据无法导入。

Dul拯救过程

这个时侯,如果想要从dmp文件中挖出数据,就需要使用dul工具了。Dul工具是由Oracle开发,只在Oracle内部使用,并且不对外提供支持。

启动DUL

将dul软件包解压后,只有1个二进制可执行文件,直接执行就可以进入dul环境。

扫描dmp文件

通过unpump header命令,可以看到dmp文件头已经损坏

通过scan命令,扫描整个dmp文件

从扫描dmp的结果可以得知,t1表的数据是从dmp文件的8837开始,t2表的数据是从dmp文件的1991992开始。

从dmp文件中导出数据

这时侯可以使用dul的unexp命令,从dmp文件中导出数据。例如,导出t1表的数据,命令如下:

sqlldr加载数据

使用unexp命令抽取之后,会产生2个文件,其中是一个sqlldr的ctl文件,可以通过sqlldr将数据加载到数据库。如下:

 

 

未经允许不得转载:Oracle一体机用户组 » dmp文件损坏了该怎么办

相关推荐