ORACE 非归档模式redo文件恢复

实验环境

  • 操作系统 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

--注:这种方法慎用,只有当其它方法都尝试了无效,作为最后一种尝试的时候使用,设置隐藏参数有可能造成意想不到的后果。

该情况下,数据库无法正常启动,会造成部分数据丢失。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值