oracle 日志恢复 oracle 日志恢复实验

在线重做日志出现讹误 - 不可对此redo log进行drop操作 - 需要是用CLEAR LOGFILE操作

症状

当打开数据库时,发现在其中一个redo log文件存在讹误报错。可能存在以下报错:

ORA-16038 log %s sequence# %s cannot be archived
ORA-354 corrupt redo log block header
ORA-353 log corruption near block <num> change <str >time <str>
ORA-367 checksum error in log file header
ORA-368 checksum error in redo log block

无法drop掉这个redo log,因为它需要用于实例恢复。

注意:在线重做日志当遇到以下情况下不可被drop:

  • 数据库仅有两个日志组
  • 出现讹误的redo log属于当前日志组

原因
有许多原因可以导致日志文件出现讹误,比如硬件错误等。

解决方法
清理当前存在问题的日志文件。

  • 语法:
alter database clear <unarchived> logfile group <integer>;
alter database clear <unarchived> logfile '<filename>';
  • 例子:
alter database clear logfile group 1;
alter database clear unarchived logfile group 1;

如果status=CURRENT或status=ACTIVE在线重做日志无法被清理,且执行清理时报ORA-1624错。
在这种情况下,数据库就不得不进行时间点恢复到最近可用的归档日志时点上了。

注意:

  • 由于日志被清理后,这部分日志数据实际上属于“丢失的归档日志”,因此这时候数据库若出现问题会影响到数据库的完整性恢复。因此使用alter database clear logfile后应该立即进行新的数据库备份。
  • 如果在数据库打开状态下出现在线重做日志讹误,可以在不shutdowns数据库的情况下使用alter database clear logfile来清理redo log文件。命令会对指定日志组中的所有日志文件记录进行清理。

猜你喜欢

转载自blog.csdn.net/liu_maclean/article/details/81982550