Oracle数据恢复 – 注意Expdp导出文件可能初始写入损坏

最近一个客户遭遇到了一次非常意外的数据损失,客户在维护时重建系统,先通过expdp备份了数据,结果当进行导入恢复数据时,发现部分重要的数据表无法恢复,出现错误。这个案例提示我们:不能尽信expdp等导出文件备份,必须通过多重手段协同,全面保障数据安全。

导入DMP文件时出现的错误大致如下:

Import: Release 11.2.0.1.0 – Production on 星期日 12月 30 15:37:27 2013
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 and Real Application Testing options
已成功加载/卸载了主表 “CW9999”.”SYS_IMPORT_TABLE_02″
启动 “CW9999”.”SYS_IMPORT_TABLE_02″:  cw9999/******** parfile=data10.par
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
ORA-31693: 表数据对象 “CW9999″.”PSXM” 无法加载/卸载并且被跳过, 错误如下:
ORA-02354: 导出/导入数据时出错
ORA-02368: the following file is not valid for this load operation
ORA-02369: internal number in header in file H:\DMP\bj.dmp is not valid
ORA-31693: 表数据对象 “CW9999″.”PSMOD” 无法加载/卸载并且被跳过, 错误如下:
ORA-02354: 导出/导入数据时出错
ORA-39776: 加载表 “CW9999″.”SPMOD” 时出现致命的直接路径 API 错误
ORA-00600: 内部错误代码, 参数: [klaprs_11], [60], [0], [], [], [], [], [], [], [], [], []

注意这其中最关键的错误是ORA-02369,提示DMP文件中的内部数字标记非法,这其实说明导出文件损坏了,以下是该错误的官方解释:

ORA-02369 internal number in header in file string is not valid
Cause: If the dump files were transferred over, verify the transfer operation was done correctly.
Action: The specified file could not be used for this load because the internal number in the header was not valid.

在MOS上的Note:785473.1 上有提示,如果文件通过ftp等方式传输,可能丢失了内容,可以尝试重传,但是这种概率极低,事实上是,在执行导出时文件就损坏了。这种情况下,不可避免的要丢失数据。在MOS上,有几十个与此错误有关的SR。

在这个客户案例中,部分数据表是完好的,可以导入,但是其中一些表出错,无法导入还原到数据库中。

在这种情况下,极限的数据挽救情况是:通过ODU、DUL等工具,可以扫描DMP文件,尝试恢复其中完好的数据,但是通常无法做到完好无损了。

技术提示:ORA-02369 不是指dmp文件的开始部分损坏,对于DMP文件来说,每个表开始部分都存在一个Header信息,这个错误是指对于指定表,这个信息损坏。在这个案例中,可能是并行导出导致的写损坏。

案例警示:在重要数据备份中,不能仅采用单一手段,多重手段结合,才能确保数据万无一失

发表评论

电子邮件地址不会被公开。 必填项已用*标注