love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

如何抽取损坏的dmp文件中的数据

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

本文链接地址: 如何抽取损坏的dmp文件中的数据

在某些情况下,如果没有物理备份,只要逻辑的导出备份,需要进行恢复时,发现dmp文件又损坏了,通常来讲是比较悲剧的。针对这样的极端情况,Oracle DUL是可以经常支持的(目前ODU尚未支持)。
如下是我的一些简单的测试,供参考!
##### 测试DUL是否支持抽取exp的dmp

当使用scan dump file扫描完exp的dmp文件之后,最后是讲scan的数据输出到文件,方便查看,然后可以直接抽取我们需要的表,如下:

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

当测试完DUL的exp dmp支持之后,我比较好奇是否会支持expdp呢? 如下是测试过程!

###### 测试DUL是否支持expdp

下面我们来测试,Oracle DUL是否支持expdp的dmp文件的抽取。
++++使用unpump命令查看dmp文件头信息

这里需要注意的是,scan的结果有10条,表示这个expdp的dmp文件中包含了10个表的内容,如果我只想抽取之前的一个表怎么办呢? 可以结合expdp的日志来进行判断,或者利用strings来确认。

这里假设我想抽取第一个表的数据:

上面的结果中,最为关键的一行是:Table data from 94872 until 77916680
根据这行结果,我们知道该表的offset为94872到 77916680,因此下面根据偏移量来抽取该表的数据:

我们可以看到,目前DUL 算是比较完美的支持了exp和expdp 的dmp。(我测试过程中遇到了一些其他的状况,这里不描述了)。

Leave a Reply

You must be logged in to post a comment.