ORACE 非归档模式redo文件恢复
2017-05-07 23:34
190 查看
实验环境
操作系统 Redhat5.4 x86数据库版本 oracle 11gR2 (11.2.0.1.0)
数据库为未开启归档模式
[oracle@node1 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Sun May 7 22:12:48 2017 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to an idle instance. SQL> startup; ORACLE instance started. Total System Global Area 836976640 bytes Fixed Size 1339740 bytes Variable Size 553651876 bytes Database Buffers 276824064 bytes Redo Buffers 5160960 bytes Database mounted. Database opened. SQL> archive log list Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 19 Current log sequence 21 SQL> select LOG_MODE,OPEN_MODE,FORCE_LOGGING from v$database; LOG_MODE OPEN_MODE FOR ------------ -------------------- --- NOARCHIVELOG READ WRITE NO
实验模拟
1.redo日志组中部分member文件丢失或损坏
redo日志组部分member文件丢失,无论当前日志组是inactive, active(非current,current)都不会造成数据丢失,恢复方法也相同,因此不做特别区分。详细参见:http://blog.csdn.net/zhuke0203/article/details/71311993#t2
案例模拟
SQL> set line 180 SQL> col member for a60 SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_ ---------- ------- ------- ------------------------------------------------------------ --- 1 ONLINE /u01/app/oracle/oradata/PROD1/disk1/redo01a.log NO 1 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo01b.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo02a.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo02b.log NO 3 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo03a.log NO 3 ONLINE /u01/app/oracle/oradata/PROD1/disk4/redo03b.log NO 6 rows selected. SQL> select group#,sequence#, members, archived, status from v$log; GROUP# SEQUENCE# MEMBERS ARC STATUS ---------- ---------- ---------- --- ---------------- 1 19 2 NO INACTIVE 2 20 2 NO INACTIVE 3 21 2 NO CURRENT SQL> !rm /u01/app/oracle/oradata/PROD1/disk1/redo01a.log SQL> startup force; ORACLE instance started. Total System Global Area 836976640 bytes Fixed Size 1339740 bytes Variable Size 553651876 bytes Database Buffers 276824064 bytes Redo Buffers 5160960 bytes Database mounted. Database opened. --数据库可以正常启动,alert日志会有相关报错信息: Sun May 07 22:15:19 2017 db_recovery_file_dest_size of 2048 MB is 18.19% used. This is a user-specified limit on the amount of space that will be used by this database for recovery-related files, and does not reflect the amount of space available in the underlying filesystem or ASM diskgroup. Errors in file /u01/app/oracle/diag/rdbms/prod1/PROD1/trace/PROD1_m000_8957.trc: ORA-00338: log 1 of thread 1 is more recent than control file ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/PROD1/disk2/redo01b.log' Errors in file /u01/app/oracle/diag/rdbms/prod1/PROD1/trace/PROD1_m000_8957.trc: ORA-00313: open failed for members of log group 1 of thread 1 ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/PROD1/disk1/redo01a.log' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 Checker run found 1 new persistent data failures
案例恢复
由于损坏的只是日志组中的部分member,因此可以将损坏的member file文件删除以后重新添加进来:SQL> alter database drop logfile member '/u01/app/oracle/oradata/PROD1/disk1/redo01a.log'; alter database drop logfile member '/u01/app/oracle/oradata/PROD1/disk1/redo01a.log' * ERROR at line 1: ORA-01609: log 1 is the current log for thread 1 - cannot drop members ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/PROD1/disk1/redo01a.log' ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/PROD1/disk2/redo01b.log' SQL> alter system switch logfile; System altered. SQL> select group#, sequence#, members, archived, status from v$log; GROUP# SEQUENCE# MEMBERS ARC STATUS ---------- ---------- ---------- --- ---------------- 1 22 2 NO ACTIVE 2 23 2 NO CURRENT 3 21 2 NO INACTIVE SQL> alter database drop logfile member '/u01/app/oracle/oradata/PROD1/disk1/redo01a.log'; Database altered. SQL> alter database add logfile member '/u01/app/oracle/oradata/PROD1/disk1/redo01a.log' reuse to group 1; Database altered. SQL> !ls -la /u01/app/oracle/oradata/PROD1/disk1/redo01a.log -rw-r----- 1 oracle oinstall 104858112 May 7 22:17 /u01/app/oracle/oradata/PROD1/disk1/redo01a.log
这种情况数据库可以正常启动,不会造成数据丢失。
2.非active redo日志组中所有member文件都丢失或损坏
案例模拟
SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_ ---------- ------- ------- ------------------------------------------------------------ --- 1 INVALID ONLINE /u01/app/oracle/oradata/PROD1/disk1/redo01a.log NO 1 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo01b.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo02a.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo02b.log NO 3 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo03a.log NO 3 ONLINE /u01/app/oracle/oradata/PROD1/disk4/redo03b.log NO 6 rows selected. SQL> select group#, sequence#, members, archived, status from v$log; GROUP# SEQUENCE# MEMBERS ARC STATUS ---------- ---------- ---------- --- ---------------- 1 22 2 NO ACTIVE 2 23 2 NO CURRENT 3 21 2 NO INACTIVE SQL> !rm /u01/app/oracle/oradata/PROD1/disk3/redo03a.log /u01/app/oracle/oradata/PROD1/disk4/redo03b.log SQL> startup force; ORACLE instance started. Total System Global Area 836976640 bytes Fixed Size 1339740 bytes Variable Size 553651876 bytes Database Buffers 276824064 bytes Redo Buffers 5160960 bytes Database mounted. ORA-03113: end-of-file on communication channel Process ID: 9392 Session ID: 1 Serial number: 5
案例恢复
SQL> conn / as sysdba Connected to an idle instance. SQL> startup mount; ORACLE instance started. Total System Global Area 836976640 bytes Fixed Size 1339740 bytes Variable Size 553651876 bytes Database Buffers 276824064 bytes Redo Buffers 5160960 bytes Database mounted. SQL> set line 180 SQL> col member for a60 SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_ ---------- ------- ------- ------------------------------------------------------------ --- 1 INVALID ONLINE /u01/app/oracle/oradata/PROD1/disk1/redo01a.log NO 1 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo01b.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo02a.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo02b.log NO 3 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo03a.log NO 3 ONLINE /u01/app/oracle/oradata/PROD1/disk4/redo03b.log NO 6 rows selected. SQL> select group#, sequence#, members, archived, status from v$log; GROUP# SEQUENCE# MEMBERS ARC STATUS ---------- ---------- ---------- --- ---------------- 1 22 2 NO INACTIVE 3 21 2 NO INACTIVE 2 23 2 NO CURRENT SQL> alter database clear logfile group 3; Database altered. SQL> alter database open; Database altered. SQL> select status from v$instance; STATUS ------------ OPEN
这种情况数据库无法正常启动,恢复不会造成数据丢失。
3.active redo日志组中所有member文件都丢失或损坏
ACTIVE redo日志组无论是否为current状态,恢复方法相同。案例模拟
SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_ ---------- ------- ------- ------------------------------------------------------------ --- 1 ONLINE /u01/app/oracle/oradata/PROD1/disk1/redo01a.log NO 1 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo01b.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo02a.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo02b.log NO 3 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo03a.log NO 3 INVALID ONLINE /u01/app/oracle/oradata/PROD1/disk4/redo03b.log NO 6 rows selected. SQL> select group#, sequence#, members, archived, status from v$log; GROUP# SEQUENCE# MEMBERS ARC STATUS ---------- ---------- ---------- --- ---------------- 1 25 2 NO CURRENT 2 23 2 NO INACTIVE 3 24 2 NO ACTIVE SQL> !rm /u01/app/oracle/oradata/PROD1/disk3/redo03a.log /u01/app/oracle/oradata/PROD1/disk4/redo03b.log SQL> startup force; ORACLE instance started. Total System Global Area 836976640 bytes Fixed Size 1339740 bytes Variable Size 553651876 bytes Database Buffers 276824064 bytes Redo Buffers 5160960 bytes Database mounted. ORA-00313: open failed for members of log group 3 of thread 1 ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/PROD1/disk3/redo03a.log' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3
案例恢复
SQL> select status from v$instance; STATUS ------------ MOUNTED SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_ ---------- ------- ------- ------------------------------------------------------------ --- 1 ONLINE /u01/app/oracle/oradata/PROD1/disk1/redo01a.log NO 1 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo01b.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo02a.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo02b.log NO 3 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo03a.log NO 3 INVALID ONLINE /u01/app/oracle/oradata/PROD1/disk4/redo03b.log NO 6 rows selected. SQL> select group#, sequence#, members, archived, status from v$log; GROUP# SEQUENCE# MEMBERS ARC STATUS ---------- ---------- ---------- --- ---------------- 1 25 2 NO CURRENT 3 24 2 NO ACTIVE 2 23 2 NO INACTIVE --尝试clear日志组: SQL> alter database clear logfile group 3; alter database clear logfile group 3 * ERROR at line 1: ORA-01624: log 3 needed for crash recovery of instance PROD1 (thread 1) ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/PROD1/disk3/redo03a.log' ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/PROD1/disk4/redo03b.log' --尝试recover database: SQL> recover database using backup controlfile; ORA-00279: change 577067 generated at 05/07/2017 22:55:46 needed for thread 1 ORA-00289: suggestion : /u01/app/oracle/flash_recovery_area/PROD1/archivelog/2017_05_07/o1_mf_1_24_%u_.arc ORA-00280: change 577067 for thread 1 is in sequence #24 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} ORA-00308: cannot open archived log '/u01/app/oracle/flash_recovery_area/PROD1/archivelog/2017_05_07/o1_mf_1_24_%u_.arc' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 --尝试resetlogs: SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01113: file 1 needs media recovery ORA-01110: data file 1: '/u01/app/oracle/oradata/PROD1/disk1/system01.dbf' --尝试设置隐藏参数,让数据库跳过一致性检查: SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile; System altered. SQL> shutdown immediate; ORA-01109: database not open Database dismounted. ORACLE instance shut down. SQL> startup mount; ORACLE instance started. Total System Global Area 836976640 bytes Fixed Size 1339740 bytes Variable Size 553651876 bytes Database Buffers 276824064 bytes Redo Buffers 5160960 bytes Database mounted. SQL> alter database open resetlogs; Database altered. --将隐藏参数重置回默认值: SQL> alter system reset "_allow_resetlogs_corruption"; System altered. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup; ORACLE instance started. Total System Global Area 836976640 bytes Fixed Size 1339740 bytes Variable Size 553651876 bytes Database Buffers 276824064 bytes Redo Buffers 5160960 bytes Database mounted. Database opened. SQL> SQL> select status from v$instance; STATUS ------------ OPEN SQL> set line 180 SQL> col member for a60 SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_ ---------- ------- ------- ------------------------------------------------------------ --- 1 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo01b.log NO 1 ONLINE /u01/app/oracle/oradata/PROD1/disk1/redo01a.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk2/redo02a.log NO 2 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo02b.log NO 3 ONLINE /u01/app/oracle/oradata/PROD1/disk3/redo03a.log NO 3 ONLINE /u01/app/oracle/oradata/PROD1/disk4/redo03b.log NO 6 rows selected. SQL> select group#, members, sequence#, archived, status from v$log; GROUP# MEMBERS SEQUENCE# ARC STATUS ---------- ---------- ---------- --- ---------------- 1 2 1 NO CURRENT 2 2 0 YES UNUSED 3 2 0 YES UNUSED --注:这种方法慎用,只有当其它方法都尝试了无效,作为最后一种尝试的时候使用,设置隐藏参数有可能造成意想不到的后果。
该情况下,数据库无法正常启动,会造成部分数据丢失。
相关文章推荐
- 归档模式下恢复被删除的数据文件
- 【恢复】非归档模式下因误删除数据文件导致数据库无法OPEN的故障处理
- 非归档模式下恢复数据文件浅析
- (归档模式)丢失非关键文件恢复
- oracle非归档模式下面的日志文件被意外的破坏的恢复方法
- 未启用归档数据库非数据文件(spfile,control,redo,undo,temp)全丢失的恢复方法
- 非归档模式下恢复利用offline drop命令误删除的数据文件
- (归档模式)丢失非关键文件恢复
- redo文件丢失,没有开启归档归档 恢复 _allow_resetlogs_corruption"=true
- (归档模式)丢失非关键文件恢复
- 非归档模式下恢复利用offline drop命令误删除的数据文件
- 一个归档模式无备份丢失数据文件的恢复
- rman实验之归档模式无备份,正常关机丢失当前联机重做日志文件的恢复
- (归档模式)丢失非关键文件恢复
- 未启用归档数据库非数据文件(spfile,control,redo,undo,temp)全丢失的恢复方法
- Oracle恢复(三)------归档模式下恢复数据文件
- 在归档模式下有备份,丢失数据文件的恢复
- rman实验之归档模式有备份,正常关机丢失控制文件的恢复
- (归档模式)丢失非关键文件恢复
- (归档模式)丢失非关键文件恢复