`

丢失归档日志文件的数据库恢复方法

阅读更多

演示内容
从一个不能正常打开的数据库(由于一个/多个数据库文件与其他文件不一致)中提取数据。场景:一个磁盘损坏了并且丢失了一个数据库文件。从一周前的热备转储数据文件,不幸的是丢失了几个归档日志文件。但是有问题的数据文件包含了最重要的表,如何能够挽救数据呢?
       每个DBA都知道这是有问题的,一定会丢失数据,因为某些事务丢失了,问题是会丢失多少数据?Oracle使用硬线路位置并且由于存在完整性约束问题,因此不允许正常打开数据。但是如果使用非常规的方法让Oracle删除其硬线路属性,那么应该能够提取尽可能多的数据。而通常这会比损失全部数据要好很多。

详细过程
       通常如果仅仅丢失了堆表的索引,或者某些能够很容易重建的数据,那么最好的方法应该是删除表空间并重建这些对象然后重新输入。但是如果丢失的数据文件包含了重要数据并且很难恢复,而且只有前一次的备份却又丢失了某些归档日志,那么用户可能希望能够尽可能多的从有问题的表空间恢复数据并且删除和重建表空间。
       主要的步骤如下:
1.         对当前拥有的数据进行一个冷备;
2.         转储丢失的数据库文件备份并应用可以应用的日志;
3.         设置未文档化的初始化参数,其允许你在当前状态打开数据库;
4.         执行exp并提取全部可以从有问题的表空间提取的数据;
5.         从先前的冷备转储数据库;
6.         使毁坏的数据文件offline;
7.         执行exp并提取第4步没有提取的额外数据;
8.         在一次从冷备转储;
9.         删除有问题的表空间;
10.     重建有问题的表空间;
11.     使用第四步和第七步提取的数据重建数据;
使用案例描述:ORDTAB表空间的一个数据文件ordtab03.dbf毁坏,其包含很多
ORDERS表的分区,数据文件热备于July 4, 2004,July 4—至今的某些归档日志丢失。

第一步:备份数据库
       第一步的任务是冷备当前拥有的任何数据文件,在线重做日志,和控制文件。如果丢失了一个/多个数据文件但是数据库仍然是open的,那么对每个剩余的数据文件进行热备并确保备份期间/之后的归档被安全保存。
       创建备份后,在关闭数据库之前,备份一下控制文件:
    ALTER DATABASE BACKUP CONTROLFILE TO TRACE RESETLOGS;
       然后打开备份的控制文件,删除第一个#之上的所有行,并删除“RECOVER DATABASE…”到文件结尾的全部。

第二步:转储丢失的数据库文件备份并应用日志;
这一步应该转储备份,并应用日志到直到无法在前向滚动,此时如果尝试正常打开数据库,将会得到ORA-01589: must use RESETLOGS or NORESETLOGS option for database open错误。
       如果尝试执行ALTER DATABASE OPEN RESETLOGS,将会得到ORA-01195错误:ORA-01195: online backup of file %s needs more recovery to be consistent。
    这里是Oracle使用其硬线路的位置。由于转储的数据文件不能恢复到与其他文件一致的位置,所以可能存在中断的数据并且Oracle不允许正常打开数据库。

第三步:设置未文档化的实例参数并打开数据库
       在初始化参数文件中首先需要将job_queue_processes设置为0,然后设置_allow_resetlogs_corruption=TRUE,更改该参数后,切换到保存新控制文件的目录,第一步创建的位置。然后以SYSDBA连接并运行新的控制文件创建脚本。
       此时数据库可以打开了。
SQL> SELECT COUNT(*) FROM OE.orders;

第四步:执行导出并提取数据
    在这一步可以很容易的看到那些表导出了全部的数据。
第五步:转储备份的数据库
    这一步,以及下面两步可选。这三步结合在一起允许提取更多的数据,这一步从备份的数据库转储可以高效的撤销任何由于使用_allow_resetlogs_corruption参数造成的毁坏。因此,这一步不会恢复任何丢失的数据文件。

第六步:使毁坏的数据文件offline
       ALTER DATABASE DATAFILE '/u07/oradata/PRD/ordtab03.dbf' OFFLINE;
       这一步得到数据库的完全一致性状态。
第七步:执行导出并提取额外的数据
       这一步可能能够提取从第四步不能提取的额外数据,如索引中的数据。
第八步 :转储数据库
       这是最后一次转储数据库,这一步正式回滚数据库到使用隐含参数前那一刻,然后将数据库返回到正常状态,如果从第五步转储以来没有更新任何数据,可以跳过这一步。
第九步:删除有问题的表空间
       首先需要查看是否有完整性约束限制,使用以下查询:
SELECT CR.constraint_name
  FROM dba_constraints CR, dba_constraints CP, dba_tables TP, dba_tables TR
WHERE CR.r_owner = CP.owner
   AND CR.r_constraint_name = CP.constraint_name
   AND CR.constraint_type = 'R'
   AND CP.constraint_type IN ('P', 'U')
   AND CP.table_name = TP.table_name
   AND CP.owner = TP.owner
   AND CR.table_name = TR.table_name
   AND CR.owner = TR.owner
   AND TR.tablespace_name <> 'ORDTAB'
   AND TP.tablespace_name = 'ORDTAB';
       如果有约束,可能需要创建重建脚本。如果使用export dump重建数据,约束可以从导出文件转储。
DROP TABLESPACE ordtab INCLUDING CONTENTS CASCADE CONSTRAINTS;
第十步:重建表空间
第十一步:重建数据
       执行导入。
分享到:
评论

相关推荐

    Oracle数据库非归档模式重做日志恢复方法.pdf

    6. **切换回归档模式**:为了提高数据安全性,建议将数据库切换到归档模式,这样每次日志切换都会创建归档日志,从而提供额外的数据保护。 实验表明,这种非归档模式下的重做日志恢复方法能够在没有备份的情况下...

    数据库归档日志管理方案

    数据库归档日志管理是确保数据完整性、支持事务恢复及数据审计的重要环节。在数据库管理系统(DBMS)中,归档日志记录了对数据库的所有修改操作,以便在系统故障后进行恢复。本文将深入探讨数据库归档日志管理的核心...

    DB2数据库归档日志管理方案

    DB2 数据库归档日志管理方案 DB2 数据库中的日志文件管理是非常重要的,因为日志文件中包含了数据库的所有操作记录。如果日志文件没有被正确地管理,可能会导致数据库的崩溃和数据丢失。为了解决这个问题,需要对...

    数据库归档模式详解

    然后使用归档日志文件将数据库从上一次备份带到数据文件崩溃那个时间点,即利用归档日志文件中的提交数据来恢复数据文件。 要将数据库设置为归档模式,需要遵循以下步骤:首先以SYSDBA身份登录Oracle数据库,使用...

    归档模式下的数据库恢复.txt

    - **定义**:归档模式是Oracle数据库的一种运行模式,它允许数据库在运行过程中创建归档日志文件,这些文件包含了对数据库所做的所有更改记录。 - **优点**: - 支持在线备份。 - 可以进行完全恢复或不完全恢复...

    基于非归档模式的Oracle数据库重做日志恢复方法.pdf

    这要求设计出无需归档日志备份的恢复方案。文章中提出的恢复方法能够在没有日志备份的情况下,有效地恢复重做日志,提高数据库的可用性。 **4. 解决方案** 文章中提出的方法旨在解决非归档模式下重做日志丢失的...

    清理备库已经应用的归档日志

    在Oracle数据库中,当redo log文件填满时,当前的redo log组会切换到下一个未使用的组,而旧的日志文件则被归档,生成归档日志文件。这些文件包含自上次归档以来的所有更改,对于备库来说,它们用于将变更应用到备用...

    Oracle数据库开归档方法

    按照上述步骤操作,可以确保数据库安全地切换到归档模式,并开始生成和管理归档日志文件,这对于实现高可用性和灾难恢复策略至关重要。在进行任何数据库模式更改时,都应遵循适当的变更管理和备份策略,以防止潜在的...

    Oracle归档日志空间不足引发的问题及归档日志的检测与删除

    在Oracle数据库环境中,归档日志是数据库运行过程中的重要组成部分,主要记录了数据库事务的改动,用于在系统故障后进行恢复。当归档日志空间不足时,可能会导致一系列严重的问题,例如数据库无法正常写入数据、影响...

    BLOG_【故障处理】Oracle_lhr_DG环境主库丢失归档情况下数据文件的恢复.pdf

    然而,在本案例中,主库丢失了归档日志,使得常规恢复方法变得复杂。 1. **BBED工具的使用**: BBED是Oracle数据库的一个内置诊断工具,用于修改数据库的数据文件。在本故障处理中,由于没有归档日志,BBED被用来...

    Oracle数据库日志文件损坏时修复方法的实验研究

    重做日志文件记录了所有对数据库所做的更改,而归档日志则是在数据文件丢失或损坏时恢复数据库不可或缺的部分。因此,深入理解在各种情况下如何有效处理和修复这些日志文件的损坏问题,对于确保数据库的连续性和数据...

    Oracle数据库日志文件损坏时修复方法的实验研究.pdf

    而归档日志文件则是在数据库运行在归档模式下时,当重做日志文件被轮换后保存的旧日志,它在数据介质故障恢复中起到关键作用,因为它们包含了历史的更改信息,可以用来恢复丢失的数据文件。 如果数据库的日志文件...

    Centos7.6下Oracle开启归档日志和Rman恢复.docx

    在CentOS 7.6环境下,管理和维护Oracle数据库是关键任务之一,这涉及到对数据库的备份和恢复策略。...通过定期备份和监控归档日志,可以确保在面临数据丢失风险时能够迅速恢复,从而最小化业务中断。

    日志文件的恢复

    如果手动指定归档日志文件(如示例中的`/archive/1_502_862132754.dbf`),但仍然遇到错误,如`ORA-00368`和`ORA-00353`,这可能意味着日志文件有校验和错误或块损坏。这表明日志文件可能存在物理损坏,无法直接用于...

    非常规恢复使用BBED跳过归档

    这种方法主要用于解决在归档日志丢失或损坏的情况下,如何尽可能地恢复数据库到一个可用状态的问题。 #### 数据库恢复机制 在深入了解使用BBED工具之前,先来了解一下Oracle数据库的恢复机制: 1. **NOMOUNT阶段**...

    清除SQL数据库日志文件

    在SQL Server数据库管理中,日志文件是存储所有事务处理的重要组成部分,它们记录了数据库的更改历史,确保数据的一致性和可恢复性。然而,随着时间的推移,日志文件可能会变得非常大,占用大量的磁盘空间,这可能对...

    删除ORACLE归档日志

    1. **归档模式**:当Oracle数据库运行在归档模式下,每次数据库完成一个事务,相关的重做日志条目不仅写入在线重做日志文件,还会被复制到归档日志文件中,这样可以确保在介质故障后能恢复数据。 2. **归档日志文件...

    【DATAGUARD】物理dg在主库丢失归档文件的情况下的恢复(七).pdf

    - 介绍了如何在物理DataGuard配置中,当主库丢失归档日志文件时,如何恢复数据库。 - 丢失归档文件会导致数据恢复时出现时间点断层,因此需要特别的处理方法。 5. SQL语句在DG管理中的应用 - 特别提到了管理和...

Global site tag (gtag.js) - Google Analytics