有归档 ACTIVE损坏 库崩溃 --- 实验失败,请大神帮我检测


日志组ACTIVE代表什么?

1.日志切换过了,已经归档

2.日志中涉及到的脏数据还没被DBWR写盘




SQL> select * from v$log;


   GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS     FIRST_CHANGE# FIRST_TIME

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

1    1       5   52428800     1 YES ACTIVE     595065 2011-06-13 05:27:10

2    1       6   52428800     1 NO  CURRENT     595070 2011-06-13 05:27:11

3    1       4   52428800     1 YES ACTIVE     595058 2011-06-13 05:27:02


SQL> select * from v$logfile;


   GROUP# STATUS     TYPE    MEMBER    IS_

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

3      ONLINE  /u01/oracle/oradata/db20/redo03.log    NO

2      ONLINE  /u01/oracle/oradata/db20/redo02.log    NO

1      ONLINE  /u01/oracle/oradata/db20/redo01.log    NO


SQL>


第一组和第三组 都是 active 损坏日志文件

SQL> ! cp /etc/passwd /u01/oracle/oradata/db20/redo01.log


SQL> shut abort

ORACLE instance shut down.

SQL>




SQL> startup

ORACLE instance started.


Total System Global Area  285212672 bytes

Fixed Size    1218992 bytes

Variable Size  113247824 bytes

Database Buffers  167772160 bytes

Redo Buffers    2973696 bytes

Database mounted.

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

ORA-00312: online log 1 thread 1: '/u01/oracle/oradata/db20/redo01.log'

ORA-27046: file size is not a multiple of logical block size

Additional information: 1



SQL>  open时检测到日志文件头不对


尝试清洗一下

SQL> alter database clear logfile group 1;

alter database clear logfile group 1

*

ERROR at line 1:

ORA-01624: log 1 needed for crash recovery of instance db20 (thread 1)

ORA-00312: online log 1 thread 1: '/u01/oracle/oradata/db20/redo01.log'



SQL>  不可以清洗 实例恢复需要


SQL> select * from v$log;


   GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS     FIRST_CHANGE# FIRST_TIME

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

1    1       5   52428800     1 YES ACTIVE     595065 2011-06-13 05:27:10

3    1       4   52428800     1 YES ACTIVE     595058 2011-06-13 05:27:02

2    1       6   52428800     1 NO  CURRENT     595070 2011-06-13 05:27:11


SQL>   检查日志组 发现第一组上一次状态就是ACTIVE时崩溃的



通过日志序列号得知 第一组之前的第三组日志中的记录也是需要恢复的 先恢复下

SQL> recover database;

ORA-00283: recovery session canceled due to errors

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

ORA-00312: online log 1 thread 1: '/u01/oracle/oradata/db20/redo01.log'

ORA-27046: file size is not a multiple of logical block size

Additional information: 1



SQL> 当恢复读取到redo01.log中时 文件格式不对


因为有归档  但数据并不认为此次恢复需要归档, 手动提供归档


SQL> ! ls  /home/oracle/arc1/1_*_753686542.dbf

/home/oracle/arc1/1_1_753686542.dbf  /home/oracle/arc1/1_3_753686542.dbf  /home/oracle/arc1/1_5_753686542.dbf

/home/oracle/arc1/1_2_753686542.dbf  /home/oracle/arc1/1_4_753686542.dbf


SQL> 归档号到5结束


SQL> recover database until cancel;

ORA-00279: change 595065 generated at 06/13/2011 05:27:10 needed for thread 1

ORA-00289: suggestion : /home/oracle/arc1/1_5_753686542.dbf

ORA-00280: change 595065 for thread 1 is in sequence #5



Specify log: {<RET>=suggested | filename | AUTO | CANCEL}


ORA-00279: change 595070 generated at 06/13/2011 05:27:11 needed for thread 1

ORA-00289: suggestion : /home/oracle/arc1/1_6_753686542.dbf

ORA-00280: change 595070 for thread 1 is in sequence #6

ORA-00278: log file '/home/oracle/arc1/1_5_753686542.dbf' no longer needed for this recovery


5号文件这次恢复并没用到 因为我们之前做的recover database已经把这份日志应用过了,对应的就是group 3

下一个就是需要6号归档 但我们没有,实际就是current日志,还没切换数据库就崩溃了 所以没归档 提供current在线日志

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/u01/oracle/oradata/db20/redo02.log


Log applied.

Media recovery complete.

SQL> alter database open;

alter database open

*

ERROR at line 1:

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

此时只能resetlogs起库 因为日志文件不在了


SQL> alter database open resetlogs;


Database altered.


SQL>


没有丢数据 所有日志都应用了.


你可能感兴趣的:(检测,erikxue)