`

oracle redo日志恢复

 
阅读更多
oracle redo日志恢复Oracle备份恢复中,redo的恢复相对来说还是比较简单的,只要保证每组的成员不止一个,出现问题的几率就相当小,即使出了问题我们也可按照不同的方法将他们恢复,所以如果碰到日志文件损坏,完全不必紧张!按照下面的方法来做,基本上都能搞定!


试验一:用命令清空日志组方法


1、 查看原来表中数据

SQL> conn test/test

Connected.

SQL> select * from test;


       TEL

----------

         1

         2

         3

2、插入新数据

SQL> insert into test values(4);

1 row created.

SQL> commit;

Commit complete.

SQL>

3、 正常关闭数据库

4、 利用os command删除所有redo文件

5、 启动数据库

SQL> startup

ORACLE instance started.

Total System Global Area 353862792 bytes

Fixed Size                   730248 bytes

Variable Size             285212672 bytes

Database Buffers           67108864 bytes

Redo Buffers                 811008 bytes

Database mounted.

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1: '/T3/ORACLE/oradata/ORA9/redo01.log'

6、 查看当前日志状态

SQL> select * from v$log;


    GROUP#    THREAD# SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- ---------- --- ----------------

FIRST_CHANGE# FIRST_TIME

------------- ----------

         1          1          2 104857600          1 YES INACTIVE

       487837 01-9月 -05


         2          1          4 104857600          1 NO CURRENT

       487955 01-9月 -05


         3          1          3 104857600          1 YES INACTIVE

       487839 01-9月 -05

看来redo01.log不是当前日志,对于这类非当前日志可以直接clear,系统会重新自动生成一个redo文件


7、SQL> alter database clear logfile group 1;

Database altered.

7、 继续启动db

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-00313: open failed for members of log group 2 of thread 1

ORA-00312: online log 2 thread 1: '/T3/ORACLE/oradata/ORA9/redo02.log'

8、 看来redo也得恢复,但是redo02是当前redo,直接clear是不行的

SQL> alter database clear logfile group 2;

alter database clear logfile group 2

*

ERROR at line 1:

ORA-00350: log 2 of thread 1 needs to be archived

ORA-00312: online log 2 thread 1: '/T3/ORACLE/oradata/ORA9/redo02.log'

9、 按照oracle的某些做法也是不行的

SQL> alter database clear unarchived logfile group 2 unrecoverable datafile;

alter database clear unarchived logfile group 2 unrecoverable datafile

*

ERROR at line 1:

ORA-00313: open failed for members of log group 2 of thread 1

ORA-00312: online log 2 thread 1: '/T3/ORACLE/oradata/ORA9/redo02.log'

ORA-27037: unable to obtain file status

SVR4 Error: 2: No such file or directory

Additional information: 3

10、              尝试从其他冷被分cp过来一个,再作clear,还是不行

SQL> host cp /T3/ORACLE/oradata2/ORA9/redo02.log /T3/ORACLE/oradata/ORA9/


SQL> alter database clear unarchived logfile group 2 unrecoverable datafile;

alter database clear unarchived logfile group 2 unrecoverable datafile

*

ERROR at line 1:

ORA-00322: log 2 of thread 1 is not current copy

ORA-00312: online log 2 thread 1: '/T3/ORACLE/oradata/ORA9/redo02.log'

SQL>

11、              但是对于非当前日志就都可以,下面看看redo03

SQL> alter database clear logfile group 3;


Database altered.


结论:


如果数据库是正常shutdown,非当前日志都可以直接clear来重新生成,而且不丢失数据,因为正常关闭db,数据已经写入dbf文件了。唯独当前日志不可以,当前日志必须用其他方法恢复,不管是不是正常关闭,



方法二:用cancel模式恢复数据库


前面的出错提示,步骤都一样,唯独恢复的方法不一样

SQL> startup

ORACLE instance started.

Total System Global Area 353862792 bytes

Fixed Size                   730248 bytes

Variable Size             285212672 bytes

Database Buffers           67108864 bytes

Redo Buffers                 811008 bytes

Database mounted.

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1: '/T3/ORACLE/oradata/ORA9/redo01.log'

看看丢失了哪些redo

SQL> host ls /T3/ORACLE/oradarta/ORA9/redo*

/T3/ORACLE/oradarta/ORA9/redo*: No such file or directory

看来redo都丢了

直接recover

SQL> recover database until cancel;


Media recovery complete.

这个时候redo还没有生成

SQL> host ls /T3/ORACLE/oradata/ORA9/redo*

/T3/ORACLE/oradata/ORA9/redo*: No such file or directory

启动数据库

SQL> alter database open ;

alter database open

*

ERROR at line 1:

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


SQL> alter database open resetlogs;

Database altered.

(注意,这里必须用resetlogs,否则会错误的


SQL> alter database open noresetlogs;


alter database open noresetlogs


*


ERROR at line 1:


ORA-00313: open failed for members of log group 1 of thread 1


ORA-00312: online log 1 thread 1: '/T3/ORACLE/oradata/ORA9/redo01.log'


SQL>


Resetlogs其实就是根据控制文件让系统自动重新生成redo,如果noresetlog的话,就不会重新生成redo,缺少了文件,db自然无法启动)

SQL> host ls /T3/ORACLE/oradata/ORA9/redo*

/T3/ORACLE/oradata/ORA9/redo01.log /T3/ORACLE/oradata/ORA9/redo02.log /T3/ORACLE/oradata/ORA9/redo03.log

SQL>

检验

SQL> select * from test.test;


       TEL

----------

         1

         2

         3

         4

SQL>

数据一点儿都没有丢失


结论:


如果数据库是正常关闭的,用recover database until cancel可以轻松恢复或者说重新建立所有的redo,不再区分是否是当前日志,而且由于正常关闭,不会丢失任何数据,唯一可能丢失的情况就是如果日志还没有归档


这种恢复方法由于要resetlogs,所以在恢复完成后,日志清零,以前的备份不再起作用,所以建议立即备份


SQL> archive log list;


Database log mode              Archive Mode


Automatic archival             Enabled


Archive destination            /T3/ORACLE/arch


Oldest online log sequence     0


Next log sequence to archive   1


Current log sequence           1


SQL>




实验三:通过重新生成控制文件来恢复redo


前面的都一样,只是处理方法不一样


SQL> startup


ORACLE instance started.



Total System Global Area 353862792 bytes


Fixed Size                   730248 bytes


Variable Size             285212672 bytes


Database Buffers           67108864 bytes


Redo Buffers                 811008 bytes


Database mounted.


ORA-00313: open failed for members of log group 1 of thread 1


ORA-00312: online log 1 thread 1: '/T3/ORACLE/oradata/ORA9/redo01.log'



SQL> alter database backup controlfile to trace;



Database altered.



SQL> shutdown immediate


ORA-01109: database not open



Database dismounted.


ORACLE instance shut down.


SQL>


2、 修改一下刚才生成的那个文件

CREATE CONTROLFILE REUSE DATABASE "ORA9"  RESETLOGS  ARCHIVELOG

-- SET STANDBY TO MAXIMIZE PERFORMANCE

    MAXLOGFILES 50

    MAXLOGMEMBERS 5

    MAXDATAFILES 100

    MAXINSTANCES 1

    MAXLOGHISTORY 226

LOGFILE

GROUP 1 '/T3/ORACLE/oradata/ORA9/redo01.log' SIZE 100M,

GROUP 2 '/T3/ORACLE/oradata/ORA9/redo02.log' SIZE 100M,

GROUP 3 '/T3/ORACLE/oradata/ORA9/redo03.log' SIZE 100M

-- STANDBY LOGFILE

DATAFILE

'/T3/ORACLE/oradata/ORA9/system01.dbf',

'/T3/ORACLE/oradata/ORA9/undotbs01.dbf',

'/T3/ORACLE/oradata/ORA9/cwmlite01.dbf',

'/T3/ORACLE/oradata/ORA9/drsys01.dbf',

'/T3/ORACLE/oradata/ORA9/example01.dbf',

'/T3/ORACLE/oradata/ORA9/indx01.dbf',

'/T3/ORACLE/oradata/ORA9/odm01.dbf',

'/T3/ORACLE/oradata/ORA9/tools01.dbf',

'/T3/ORACLE/oradata/ORA9/users01.dbf',

'/T3/ORACLE/oradata/ORA9/xdb01.dbf',

'/T3/ORACLE/oradata/ORA9/test01.dbf'

CHARACTER SET ZHS16GBK

;

另存为一个脚本,运行他

SQL> @clone.sql

Control file created.

SQL> alter database open resetlogs;

Database altered.

SQL>

搞定……………


结论:这种方法的关键是重新创建控制文件,后面的步骤和前面的道理一样的



前面的三种方法都是假设db是正常关闭的,数据已经写入数据库文件中,所以不会由数据存在redo种,所以clear的话也不会有数据丢失
分享到:
评论

相关推荐

    oracle的undo与redo

    oracle日志,Undo日志记录某数据被修改前的值,可以用来在事务失败时进行rollback;Redo日志记录某数据块被修改后的值,可以用来恢复未写入data file的已成功事务更新的数据。

    oracle_redo_undo

    Oracle Redo 和 Undo Mechanism Oracle 中的 redo 和 undo 机制...redo 机制可以保证数据库的重做日志的记录,而 Undo 机制可以将数据库恢复到事务开始前的状态。它们之间的协作关系是 Oracle 数据库的关键组件之一。

    顶级DBA漫谈Oracle Rman备份与恢复

    归档备份是指备份数据库的归档redo日志文件,而非归档备份是指备份数据库的数据文件。 RMAN 基本概念 RMAN是Oracle提供的一种备份和恢复工具,旨在帮助DBA管理员更好地管理和保护Oracle数据库。 RMAN提供了强大的...

    oracle重做日志教程

    重做日志教程,希望与大家一些学习进步重做日志文件(REDO LOGFILE)又被称为事务日志文件(TRANSACTION LOGFILE)。它对ORACLE数据库来说是至关重要的。ORACLE中每执行一条更新 操作时,都会引起数据库的变化,因此...

    解决ORACLE联机日志文件无故全部消失问题

    这样就会恢复出两个 50M 的日志文件 REDO02.LOG 和 REDO03.LOG。 3. 恢复当前联机日志 最后,我们需要恢复当前联机日志。首先,我们需要确认一下通过 clear 的方式无法恢复当前联机日志: ``` SQL> alter ...

    oracle数据库的备份与恢复.docx

    oracle 数据库恢复的步骤包括恢复控制文件、恢复数据文件和恢复 redo 日志文件等。恢复控制文件需要使用 recover 命令,恢复数据文件需要使用 recover 命令,恢复 redo 日志文件需要使用 recover 命令。 oracle ...

    Oracle数据库重做日志文件的分析及其应用.pdf

    本文将详细讨论 Oracle 数据库重做日志文件的分析及其应用,包括日志文件的概念、类型、结构、恢复机制等方面的知识点。 1. 日志文件的概念 日志文件是数据库管理系统中一个必不可少的组成部分,用于记录数据库的...

    Oracle案例:损坏控制文件的恢复方法

    Oracle 案例:损坏控制文件的恢复方法 Oracle 数据库的控制文件是数据库的核心组件之一,对数据库的正常运行起着至关重要的作用。然而,控制文件的损坏可能会导致数据库无法启动或出错。因此,了解如何恢复损坏的...

    Oracle数据库备份与恢复策略.pdf

    恢复步骤包括恢复控制文件、恢复数据文件、恢复redo日志文件等步骤。 五、结论 Oracle 数据库备份和恢复策略是油气勘探项目中数据安全的关键。通过合理选择备份设备和制定备份策略,可以确保数据安全和恢复的可靠...

    Oracle LogMiner日志挖掘技术全解析

    Oracle Redo Log就像Oracle数据库的录像带,记录了数据库中的所有改变,Oracle Logminer工具可以有效地挖掘并且呈现出Redo Log中的事务变化,从而可以实现数据恢复、Oracle Redo Log机制的研究、数据库监控和审计、...

    Oracle 11g OCP-052 V9.02考试题库中英文对照详解

    哪些是关于 redo 日志在实例恢复期间的正确描述? A. Inactive 和 current 状态的 redo 日志需要完成恢复 B. Online 和 Archived 日志需要实例恢复 C. 最后一个 checkpoint 之后的所有 redo 信息都要应用到数据...

    Oracle数据库复习题集.docx

    归档模式是 Oracle 数据库的一种运行模式,在这种模式下,数据库会将 redo 日志文件存档,以便在需要时可以恢复数据库。在非归档模式下,数据库不能存档 redo 日志文件。 7. 监听进程(Listener) 监听进程是 ...

    oracle数据库题库.pdf

    Oracle数据库提供了多种备份和恢复方法,包括冷备份、热备份、incremental backup、redo日志备份等。 6. Oracle数据库索引和优化: Oracle数据库索引是指在表中的一个或多个列上建立的数据结构,以便加快数据的查询...

    Oracle 12c数据库体系结构图文详解手册

    Oracle 数据库包含了用于存放数据的数据文件(DataFiles)、用于保护数据不丢失的联机重做日志文件(Online Redolog Files)和用于连接 Oracle 实例和数据库所需要的控制文件(Control Files)。 五、内存结构 ...

    NOARCHIVELOG模式下Oracle数据库恢复常见故障分析.pdf

    Oracle数据库恢复常见故障分析在NOARCHIVELOG模式下 Oracle数据库恢复是数据库管理员的基本技能之一。在NOARCHIVELOG模式下,数据库恢复非常重要。此模式下,数据库不记录redo log,因此无法进行完整的数据库恢复...

    Oracle基础知识.ppt

    维护redo日志文件需要检查redo日志文件状态、备份redo日志文件等。 Managing Tablespaces and Data Files 管理表空间和数据文件需要检查表空间状态、管理数据文件等。 Managing Rollback Segments 管理回滚段...

    Oracle数据库Data Guard技术介绍.pptx

    Oracle 数据库 Data Guard 技术是一种高可用性和灾难恢复解决方案,旨在保护 Oracle 数据库免受故障和数据丢失的影响。该技术通过在主数据库和备用数据库之间传输 redo 数据来实现高可用性和灾难恢复。 Data ...

    Oracle数据库的数据保护机制及应用

    Oracle数据库提供了多种日志恢复机制,包括redo日志恢复机制、undo日志恢复机制等。 闪回恢复机制是指在数据库中对闪回进行恢复,以便在出现错误或崩溃时恢复数据库。Oracle数据库提供了多种闪回恢复机制,包括闪...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    13.5.1联机Redo日志损坏与恢复 13.5.2数据文件脱机与恢复 13.5.3表空间脱机与恢复 13.6本章小结 第14章 RAC安全性 14.1数据访问安全性 14.1.1 Oracle安全性解决方案 14.1.2 VPD和OLS策略 14.2 Database Vault...

    oracle8管理控制文件和重做日日志文件.ppt

    重做日志文件用于记录数据库的所有变化,可以帮助数据库在崩溃或损坏时恢复到最近的一致状态。在管理重做日志文件时,可以使用Alter database add logfile命令来添加新的重做日志文件,也可以使用Alter database ...

Global site tag (gtag.js) - Google Analytics