【oracle11g,11】redo日志文件2 :日志恢复 (重点)

十.日志文件的恢复:
1.有多个日志成员,删除当前日志组一个成员: 数据库仍能启动,

告警日志中报错找不到日志文件。
 ORA-00313: open failed for members of log group 1 of thread 1
 ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/prod/disk1/redo01.log'

解决:
SQL>alter system switch logfile;

SQL>alter system checkpoint;

SQL> alter database drop logfile member '/u01/app/oracle/oradata/prod/disk1/redo01.log';

SQL> alter database add logfile member '/u01/app/oracle/oradata/prod/disk1/redo01.log' to group 1;

2.删除inactive非当前日志组的所有成员: 数据库无法启动。

解决方案1:执行clear操作,重新建立空白的日志文件
数据库mount阶段,执行clear
SQL> alter database clear logfile group 4;
SQL> alter database open ;

解决方案2:执行drop操作:
SQL> alter database drop logfile group 4;

3.删除当前日志组的所有成员并且正常关库: 数据库无法启动
由于是正常关库,所以会已经写过脏块了。

oracle 10g 解决:
oracle 10g在恢复当前日志组时,不让clear 或者drop当前的日志组,只能做不完全恢复。
#使用不完全恢复, until cancel:表示应用日志到日志断层的地方。
SQL> recover database until cancel;
#必须使用resetlogs 开库,
SQL> alter database  open resetlogs;

oracle 11g解决:
 oracle 11g在恢复当前日志组时,可以执行clear 或者drop日志组,因为是正常关库oracle 已经写了脏苦块。 
SQL> alter database clear logfile group 2;

#在归档模式下
用alter database clear logfile命令尝试重构logfile group 1,失败;
SQL> alter database clear logfile group 1;
alter database clear logfile group 1
*
ERROR at line 1:
ORA-00350: log 1 of instance orcl (thread 1) needs to be archived
ORA-00312: online log 1 thread 1: '/u02/oradata/orcl/redo01.log'
失败的原因是group 1还没有归档,需要加上”unarchived”参数;
SQL> alter database clear unarchived logfile group 1;
Database altered.

建议clear,特别是强行clear后作一次数据库的全备份。 

4.删除当前日志组的所有成员并且非正常关库: 数据库无法启动
   
   使用不完全恢复 recover database until cancel 无法恢复。
 解决办法: 
  首选方法:如果有备份可以使用备份恢复,(备份恢复时解决)
   
  方法2:使用_allow_resetlogs_corruption=true隐藏参数启动数据库,将数据中文件导出,当使用了隐藏参数,数据库完整性被破坏,数据库不能再继续使用,需要建立新的数据库将数据文件导进去。


十一.日志文件的存储管理:

日志文件存储:日志文件很重要,最好使用io最快的磁盘,最好使用阵列。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章