当前位置:  数据库>oracle

Oracle dmp文件损坏恢复案例

    来源: 互联网  发布时间:2017-06-07

    本文导语: 前一段时间帮一个朋友的朋友恢复了一个损坏的dmp文件,大概100多个G,记录一下恢复过程并简单总结一下 一、描述 这个dmp文件是从一个Oracle 9i的数据库上exp出来的,在导入Oracle 11g版本的时候,可能会随机出现两类错误,如下 ...

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

一、描述

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

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

 

导入了 0 行
. . 正在导入表 "D_xxxxxx"
. . 正在导入表 "D_xxxxx2"
导入了 0 行
. . 正在导入表 "D_xxxxx3"
...........................................................................
...........................................................................
导入了 246844 行
. . 正在导入表 "D_xxxx4"
导入了 0 行
. . 正在导入表 "D_xxx5"
...........................................................................
...........................................................................
导入操作一直停留在D_xxx5表上,几天都是一样
注意:其中表名已经被模糊化掉 

(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:testtest.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:testtest.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文件中的表结构,如下
 

DUL>  scan dump file e:testtest.dmp;
 
0: CSET: 852 (ZHS16GBK)
 
3: SEAL EXPORT:V11.02.00
 
20: USER DBMON
 
28: TYPE TABLES
 
2317: TABLE "DH_SQL"
 
2332: CREATE TABLE "DH_SQL" ("ID" NUMBER, "NAME" VARCHAR2(128), "TYPE" VARCHAR2(19))  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 41
 
94304 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS
 
2597: INSERT INTO "DH_SQL" ("ID", "NAME", "TYPE") VALUES (:1, :2, :3)
 
2661: BIND information for 3 columns
 
 col[  1] type 2 max length 22
 
 col[  2] type 1 max length 128 cset 852 (ZHS16GBK) form 1
 
 col[  3] type 1 max length 19 cset 852 (ZHS16GBK) form 1
 
Conventional export
 
2687: start of table data
 
2781632: TABLE "DH_STAT"
 
2781648: CREATE TABLE "DH_STAT" ("ID" NUMBER, "NAME" VARCHAR2(128), "TYPE" VARCHAR2(19))  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIA
 
L 4194304 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS
 
2781914: INSERT INTO "DH_STAT" ("ID", "NAME", "TYPE") VALUES (:1, :2, :3)
 
2781979: BIND information for 3 columns
 
 col[  1] type 2 max length 22
 
 col[  2] type 1 max length 128 cset 852 (ZHS16GBK) form 1
 
 col[  3] type 1 max length 19 cset 852 (ZHS16GBK) form 1
 
Conventional export
 
2782005: start of table data
 
5898003: CREATE INDEX "IND111" ON "DH_STAT" ("NAME" )  PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 3145728 NEXT 1048576 MINEXTENTS 1 FREELISTS
 
1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING
 
5898339: CREATE INDEX "IND_2" ON "DH_STAT" ("NAME" , "ID" )  PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 4194304 NEXT 1048576 MINEXTENTS 1 FREE
 
LISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING
 
5900617: TABLE "DH_STAT"
 
5900705: ENDTABLE
 
5900740: EXIT
 
5900745: EXIT

更多详情见请继续阅读下一页的精彩内容:


    
 
 

您可能感兴趣的文章:

  • Oracle中修复数据块的损坏
  • Oracle重做日志文件损坏或丢失后的恢复
  • [Oracle] 解析在没有备份的情况下undo损坏怎么办
  • Oracle中模拟及修复数据块损坏
  • Oracle控制文件的损坏或完全丢失的恢复办法
  • Oracle数据库恢复后心得
  • 关于系统重装后Oracle数据库完全恢复的解决办法
  • oracle drop table(表)数据恢复方法
  • Oracle数据库备份和恢复工具 RMan
  • oracle备份恢复的具体方法
  • oracle中误删除表后恢复语句(FLASHBACK)
  • oracle冷备份恢复和oracle异机恢复使用方法
  • 在Oracle 10gR2中设定指定的恢复点实现轻松闪回
  • Oracle11g备份和恢复功能的提高
  • 实战Oracle数据库备份与恢复
  • Oracle数据库冷备份的异地恢复
  • oracle下实现恢复一个丢失的数据文件的代码
  • 详解通过Backup Exec来实施Oracle灾难恢复
  • Oracle的恢复管理器及DBMS_JOB包分析
  • Oracle数据库文件恢复以及备份思路
  • Oracle数据库备份恢复最佳实践
  • oracle如何恢复被覆盖的存储过程
  • rman恢复方案和oracle异机恢复
  • oracle数据库创建备份与恢复脚本整理
  • ORACLE 数据库RMAN备份恢复
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 浅析基于Oracle案例知识库设计
  • oracle使用sql脚本生成csv文件案例学习
  • Oracle案例:分析10053跟踪文件
  • Linux下Oracle常见安装错误总结及参考案例
  • Oracle PL/SQL入门案例实践
  • oracle—SQL技巧之(一)连续记录查询sql案例测试
  • Oracle案例详细分析:Job任务停止执行
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,