热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracledmp文件损坏恢复案例

前一段时间帮一个朋友的朋友恢复了一个损坏的dmp文件,大概100多个G,记录一下恢复过程并简单总结一下一、描述这个dmp文件是从一

前一段时间帮一个朋友的朋友恢复了一个损坏的dmp文件,大概100多个G,记录一下恢复过程并简单总结一下一、描述这个dmp文件是从一

前一段时间帮一个朋友的朋友恢复了一个损坏的dmp文件,大概100多个G,记录一下恢复过程并简单总结一下

一、描述

这个dmp文件是从一个Oracle 9i的数据库上exp出来的,在导入Oracle 11g版本的时候,可能会随机出现两类错误,如下

(1)dmp文件导入的时候,一直停留在某张表上不动,两三天都是这样,导入操作无法进行,如下

...........................................................................
...........................................................................

注意:其中表名已经被模糊化掉

(2)dmp文件导入的时候,在进行到某张表的时候,出现错误,如下

IMP-00058:遇到ORACLE 错误 1403

ORA-01403:未找到任何数据

Oracle教程:实例故障恢复

Linux-6-64下安装Oracle 12C笔记

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

二、分析

(1)刚接手的时候,由于dmp文件的结构是“表结构+数据”循环这种方式保存,因此一般在一个表导入hang住的时候,很难抽取dmp文件后续部分的内容,但是我还是保存一丝侥幸心理,尝试导出dmp文件中的表结构内容,但是很遗憾,如同问题描述中错误一样,imp过程也一直停留在那张表的地方,如下

imp dh/dh file=D:\xxxx.DMP log=D:\dh88888.log rows=N STATISTICS=NONE INDEXES=N GRANTS=N COnSTRAINTS=n full=y show=y ignore=Y

(2)用尽其它手段,例如直接抽取后续的表(跟人沟通,dmp文件中存在的其余表),设置10046等事件观察什么的,也都没什么作用,还是一直hang在那个地方,而且imp进程在数据库里表现为"SQL*Net message from client"空闲等待

(3)考虑文件是从9i版本的数据库中exp出来,因此新安装了一个9i版本的数据库,进行imp导入,但是问题依旧

(4)看来dmp文件已经出现损坏,,没有什么其它可跳过hang住地方的方法了,只能使用最后的手段,通过工具来将dmp文件中的数据抽取出来

三、解决

由于dmp文件100多G,无法传入到自己电脑上进行操作,只能通过远程操作,因此很多操作都没有记录下来,这里简单描述解决过程,后面模拟一个类似的实验来重现问题并解决

(1)通过imp将dmp文件中可以导入的表数据入库,如下

imp xxx/xxxx file=D:\xxxx.DMP log=D:\dh.log full=y indexes=n feedback=1024 commit=y ignore=Y BUFFER=1000000 STATISTICS=NONE

注意,此处一定要设置commit=y参数

(2)通过设置commit=y参数,我们可以将hang住部分的表数据也导入部分

备注:此处也算一个小技巧,实际在我处理的这个案例中,imp导入hang住的表非常大(也就是一直imp一直停留的这张表),我们通过这种方式,发现这张表已经正常导入了200多G,因此,可以判断,这个dmp文件损坏部分的后续数据其实已经不多了。

(3)通过工具先扫描这个dmp文件中的所有表结构,判断dmp文件中还有多少张表未正常导入

(4)将dmp文件中未正常导入的表数据抽取出来,以文本形式保存,用sqlldr进行导入

(5)针对dmp文件中损坏的表,也将数据抽取出来,并将抽取的数据与“第二步”中导入到数据库中的表部分数据进行比较,去掉重复的数据,最后完成导入。(这里其实损坏的表数据有200G以上,幸好我们已经将大部分的数据正常入库,去掉重复数据后,仅剩一小部分而已,sqlldr很快就完成了)


四、实验模拟

(1)通过exp导出两张表,如下

E:\>exp dbmon/dbmon file=e:\test\test.dmp tables=dh_sql,dh_stat

Export: Release 11.2.0.1.0 - Production on 星期二 6月 17 10:45:22 2014

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

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径...

. . 正在导出表 DH_SQL导出了 62613 行

. . 正在导出表 DH_STAT导出了 72612 行

成功终止导出, 没有出现警告。

(2)破坏dmp文件(各种工具,dd,ue都可以),并尝试imp导入,确保文件已经损坏,如下:

E:\>imp dbmon/dbmon file=e:\test\test.dmp fromuser=dbmon touser=dh

Import: Release 11.2.0.1.0 - Production on 星期二 6月 17 10:48:57 2014

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

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

经由常规路径由 EXPORT:V11.02.00 创建的导出文件

已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入

. 正在将 DBMON 的对象导入到 DH

. . 正在导入表 "DH_SQL"

illegal lob length marker 49920

bytesread = 00000000000

TABLE = DH_SQL

IMP-00098: INTERNAL ERROR: impgst2

IMP-00008: 导出文件中出现无法识别的语句:

IMP-00008: 导出文件中出现无法识别的语句:

IMP-00008: 导出文件中出现无法识别的语句:

IMP-00008: 导出文件中出现无法识别的语句:

IMP-00008: 导出文件中出现无法识别的语句:

...省略后续部分.......

(3)使用工具抽取dmp文件中的表结构,如下

推荐阅读
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 在服务器管理和大规模操作中,常需将系统状态或执行结果通过电子邮件通知相关人员。本文详细介绍了如何利用Linux自带的命令行工具高效地通过SMTP协议发送邮件,提供了一种快速便捷的解决方案。 ... [详细]
  • 1.tarzxfapache-activemq-5.12.0-bin.tar.gztarzxfapache-activemq-5.12.0-bin.tar.gz2.cdapac ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • Ansible:自动化运维工具详解
    Ansible 是一款新兴的自动化运维工具,基于 Python 开发,集成了多种运维工具(如 Puppet、CFEngine、Chef、Func 和 Fabric)的优点,实现了批量系统配置、程序部署和命令执行等功能。本文将详细介绍 Ansible 的架构、特性和优势。 ... [详细]
  • 如何在虚拟机中实现Linux与Windows主机之间的文件夹共享
    为了在虚拟机中实现Linux与Windows主机之间的文件夹共享,首先需要确保Linux系统已安装VMware Tools。如果尚未安装,可以通过虚拟机软件提供的“安装VMware Tools”选项进行安装。安装完成后,通过配置共享文件夹设置,即可实现主机与虚拟机之间的文件互传。此外,建议检查虚拟机网络设置,确保网络连接正常,以提高文件传输的稳定性和速度。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • 如何高效地安装并配置 PostgreSQL 数据库系统?本文将详细介绍从下载到安装、配置环境变量、初始化数据库、以及优化性能的全过程,帮助读者快速掌握 PostgreSQL 的核心操作与最佳实践。文章还涵盖了常见问题的解决方案,确保用户在部署过程中能够顺利解决遇到的各种挑战。 ... [详细]
author-avatar
聪VS霞_539
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有