【DB笔试面试225】在Oracle中,如果联机Redo日志文件损坏,那么如何恢复?
作者:互联网
在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;
标签:联机,DATABASE,CLEAR,DB,ALTER,Oracle,225,Redo,日志 来源: https://blog.51cto.com/lhrbest/2709396