【DB笔试面试225】在Oracle中,如果联机Redo日志文件损坏,那么如何恢复?

【DB笔试面试225】在Oracle中,如果联机Redo日志文件损坏,那么如何恢复?

【DB笔试面试225】在Oracle中,如果联机Redo日志文件损坏,那么如何恢复?



Q          题目如下所示:

在Oracle中,如果联机Redo日志文件损坏,那么如何恢复?


     
A          答案如下所示:          



答案:联机Redo日志是Oracle数据库中比较核心的文件,当联机Redo日志文件异常之后,数据库就无法正常启动,而且有丢失数据的风险,强烈建议在条件允许的情况下,对联机Redo日志进行多路镜像。需要注意的是,RMAN不能备份联机Redo日志文件。所以,联机Redo日志一旦出现故障,则只能进行清除日志了。清除日志文件即表明可以重用该文件。如果日志文件已经归档(状态为INACTIVE,启动报ORA-00327错误),那么可以使用:

ALTER DATABASE CLEAR LOGFILE GROUP N;

如果数据库正常关闭,且该日志还没有归档(状态为ACTIVE或CURRENT,启动报ORA-01623错误),那么需要用:

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP N;--不需要数据文件

ALTER DATABASE CLEAR UNARCHIVED LOGFILE ...UNRECOVERABLE DATAFILE; --需要数据文件

也可以尝试以下恢复:

--ALTER DATABASE CLEAR LOGFILE GROUP 1;

RECOVER DATABASE UNTIL CANCEL;

ALTER DATABASE OPEN RESETLOGS;

如果数据库异常关闭,状态为ACTIVE或CURRENT,启动报ORA-01624或ORA-01194错误,那么一般不能执行CLEAR,而且可能意味着丢失数据。一般情况下,只能设置隐含参数“_ALLOW_RESETLOGS_CORRUPTION=TRUE”来进行强制执行不完全恢复了,如下所示:

alter system set "_allow_resetlogs_corruption"=true scope=spfile;

recover database until cancel; --cancel

alter database open resetlogs;

alter system set "_allow_resetlogs_corruption"=false scope=spfile;

alter system reset "_allow_resetlogs_corruption" scope=spfile sid='*';

shutdown immediate

startup

可以使用以下命令查看联机Redo日志的状态:

col member for a45

set lines 120

SELECT thread#,

         a.sequence#,

         a.group#,

         TO_CHAR (first_change#, '9999999999999999') "SCN",

         a.status,

         MEMBER

    FROM v$log a, v$logfile b

   WHERE a.group# = B.GROUP#

ORDER BY a.sequence# DESC;



上一篇:【DB笔试面试745】在Oracle中,RAC环境下的Redo文件可以放在节点本地吗?


下一篇:react-saga 浅析