ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 掉电导致磁盘坏,非归档下的redo全部丢失,数据库打开的恢复失败

掉电导致磁盘坏,非归档下的redo全部丢失,数据库打开的恢复失败

原创 Linux操作系统 作者:stone0619 时间:2009-06-12 11:12:35 0 删除 编辑

 

1、环境

OSsun solaris

Database version8.1.7

数据文件存放路径:/u01/oradata/bjtb/; /u02/oradata/bjtb/

数据库为非归档

 

2、问题

raid5坏两个盘,oracle的文件存放路径/u01,/u02都挂不上

         更换硬盘后,/u01可挂上,/u02仍然不可以

         /u02中存放的文件有:8个普通的数据文件,全部的redo日志文件

 

3、处理过程

$sqlplus / as sysdba 失败

$sqlplus /nolog

Sql>conn / as sysdba  成功

Sql>startup 失败,无法mount

 

Alert文件中显示其中一个控制文件在/u02

Vi  $ORACLE_HOME/dbs/initbjtb.ora

删掉 /u02下的控制文件的路径,仅保留另外两个控制文件即可

 

Sql>shutdown immediate

Sql>startup   可以mount,但是有数据文件在/u02,因此无法打开数据库

 

Sql>alter database backup controlfile to trace;

Udump下查看生成的trace文件,发现一半的数据文件都在/u02下,全部redo也在/u02

还好这些都是普通的数据文件,offline后数据库应该是可以起来的,只是会丢掉很多数据。尝试恢复。

 

Sql>alter database open

报数据文件3找不到

Sql>alter database datafile 3 offline drop;

根据提示,offline drop掉的数据文件有 3,4,6,7,10,13,14,15

 

Sql>alter database open;

redo日志找不到

Sql>alter database rename file ‘/u02/oradata/bjtb/redo01.log’ to ‘/u02/oradata/bjtb/redo01.log’;

报新文件’/u02/oradata/bjtb/redo01.log’找不到

尝试在重建控制文件的脚本中修改此路径,重建控制文件失败。于是

$touch /u02/oradata/bjtb/redo01.log

$touch /u02/oradata/bjtb/redo02.log

$touch /u02/oradata/bjtb/redo03.log

 

Sql>alter database rename file ‘/u02/oradata/bjtb/redo01.log’ to ‘/u02/oradata/bjtb/redo01.log’;

Sql>alter database rename file ‘/u02/oradata/bjtb/redo01.log’ to ‘/u02/oradata/bjtb/redo02.log’;

Sql>alter database rename file ‘/u02/oradata/bjtb/redo01.log’ to ‘/u02/oradata/bjtb/redo03.log’;

成功

Sql>alter database open;

报错:需要resetlogsresetlogs

Sql>alter database open resetlogs;

报错:需要介质恢复

Sql>recover database until cancel;

Cancel

需要更多恢复,文件system01.dbf

 

4、分析

因为故障的原因是掉电引起的,因此,导致了有些看起来是好的文件,它的checkpoint也不一致,如果日志信息还存在,那么还有可能通过日志中的记录把文件的checkpoint一致,但是,我们的redo log全部丢失,而且数据库还是在noarchivelog模式下,无法让它的checkpoint一致,数据库无法打开。只能通过备份恢复,而且还必须是完全备份。

 

5、建议

        此次问题最大的原因在于同时有两块硬盘损坏,因此对于系统的硬件,也需要定期做检查。

         数据库方面,建议最好将数据库设置成归档模式,而且需要定期对数据库备份、维护。

对于redo log,每个日志组最好有两个成员,并且两个成员分别放在不同的目录下。目前我们的redo log的三个日志组,每个日志组都是一个成员。单一redo log的丢失或损坏故障很容易恢复,但是如果碰到像我们现在的情况:断电故障,非归档,日志全部丢失。 在这种情况下,如果不幸断电时有文件的checkpoint不一致,那么就没有办法将其写一致,只能靠备份恢复了。所以,redo log的安全性也很重要。 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16426127/viewspace-606002/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-05-04

  • 博文量
    29
  • 访问量
    42421