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日志记录某数据被修改前的值,可以用来在事务失败时进行rollback;Redo日志记录某数据块被修改后的值,可以用来恢复未写入data file的已成功事务更新的数据。
Oracle Redo 和 Undo Mechanism Oracle 中的 redo 和 undo 机制...redo 机制可以保证数据库的重做日志的记录,而 Undo 机制可以将数据库恢复到事务开始前的状态。它们之间的协作关系是 Oracle 数据库的关键组件之一。
归档备份是指备份数据库的归档redo日志文件,而非归档备份是指备份数据库的数据文件。 RMAN 基本概念 RMAN是Oracle提供的一种备份和恢复工具,旨在帮助DBA管理员更好地管理和保护Oracle数据库。 RMAN提供了强大的...
重做日志教程,希望与大家一些学习进步重做日志文件(REDO LOGFILE)又被称为事务日志文件(TRANSACTION LOGFILE)。它对ORACLE数据库来说是至关重要的。ORACLE中每执行一条更新 操作时,都会引起数据库的变化,因此...
这样就会恢复出两个 50M 的日志文件 REDO02.LOG 和 REDO03.LOG。 3. 恢复当前联机日志 最后,我们需要恢复当前联机日志。首先,我们需要确认一下通过 clear 的方式无法恢复当前联机日志: ``` SQL> alter ...
oracle 数据库恢复的步骤包括恢复控制文件、恢复数据文件和恢复 redo 日志文件等。恢复控制文件需要使用 recover 命令,恢复数据文件需要使用 recover 命令,恢复 redo 日志文件需要使用 recover 命令。 oracle ...
本文将详细讨论 Oracle 数据库重做日志文件的分析及其应用,包括日志文件的概念、类型、结构、恢复机制等方面的知识点。 1. 日志文件的概念 日志文件是数据库管理系统中一个必不可少的组成部分,用于记录数据库的...
Oracle 案例:损坏控制文件的恢复方法 Oracle 数据库的控制文件是数据库的核心组件之一,对数据库的正常运行起着至关重要的作用。然而,控制文件的损坏可能会导致数据库无法启动或出错。因此,了解如何恢复损坏的...
恢复步骤包括恢复控制文件、恢复数据文件、恢复redo日志文件等步骤。 五、结论 Oracle 数据库备份和恢复策略是油气勘探项目中数据安全的关键。通过合理选择备份设备和制定备份策略,可以确保数据安全和恢复的可靠...
Oracle Redo Log就像Oracle数据库的录像带,记录了数据库中的所有改变,Oracle Logminer工具可以有效地挖掘并且呈现出Redo Log中的事务变化,从而可以实现数据恢复、Oracle Redo Log机制的研究、数据库监控和审计、...
哪些是关于 redo 日志在实例恢复期间的正确描述? A. Inactive 和 current 状态的 redo 日志需要完成恢复 B. Online 和 Archived 日志需要实例恢复 C. 最后一个 checkpoint 之后的所有 redo 信息都要应用到数据...
归档模式是 Oracle 数据库的一种运行模式,在这种模式下,数据库会将 redo 日志文件存档,以便在需要时可以恢复数据库。在非归档模式下,数据库不能存档 redo 日志文件。 7. 监听进程(Listener) 监听进程是 ...
Oracle数据库提供了多种备份和恢复方法,包括冷备份、热备份、incremental backup、redo日志备份等。 6. Oracle数据库索引和优化: Oracle数据库索引是指在表中的一个或多个列上建立的数据结构,以便加快数据的查询...
Oracle 数据库包含了用于存放数据的数据文件(DataFiles)、用于保护数据不丢失的联机重做日志文件(Online Redolog Files)和用于连接 Oracle 实例和数据库所需要的控制文件(Control Files)。 五、内存结构 ...
Oracle数据库恢复常见故障分析在NOARCHIVELOG模式下 Oracle数据库恢复是数据库管理员的基本技能之一。在NOARCHIVELOG模式下,数据库恢复非常重要。此模式下,数据库不记录redo log,因此无法进行完整的数据库恢复...
维护redo日志文件需要检查redo日志文件状态、备份redo日志文件等。 Managing Tablespaces and Data Files 管理表空间和数据文件需要检查表空间状态、管理数据文件等。 Managing Rollback Segments 管理回滚段...
Oracle 数据库 Data Guard 技术是一种高可用性和灾难恢复解决方案,旨在保护 Oracle 数据库免受故障和数据丢失的影响。该技术通过在主数据库和备用数据库之间传输 redo 数据来实现高可用性和灾难恢复。 Data ...
Oracle数据库提供了多种日志恢复机制,包括redo日志恢复机制、undo日志恢复机制等。 闪回恢复机制是指在数据库中对闪回进行恢复,以便在出现错误或崩溃时恢复数据库。Oracle数据库提供了多种闪回恢复机制,包括闪...
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...
重做日志文件用于记录数据库的所有变化,可以帮助数据库在崩溃或损坏时恢复到最近的一致状态。在管理重做日志文件时,可以使用Alter database add logfile命令来添加新的重做日志文件,也可以使用Alter database ...