其实应该算很典型的一案例
情景:oracle数据硬盘损坏-控制文件自动备份也没了,参数文件,密码文件丢失. 所有日志文件和数据文件损坏.
只有rman的备份存在-多份,归档的备份也在,过去曾经resetlog过,有一份resetlog之前的冷备.
分析:肯定恢复不到现在了,只能做不完全恢复.
1,安装oracle,打补丁
2,因为是windows机器,所以,最简单点的,dbca再重新创建一个相同名字的数据库,密码和以前一样--相同于恢复参数文件,密码文件,,另外,恢复windows讨厌的注册表等信息. unix/linux下就简单点手工建一个参数文件,改改参数,启动后再转成spfile,然后手工创建一个密码文件就可以.
3,启动数据库到nomount模式下,然后要先恢复控制文件.
4,开始用的是直接拷贝回来的以前的那个冷备的控制文件,--这个不成.因为数据库"重生"resetlog过, 所以,需要用新的控制文件--这个在recover的时候即使using backup controlfile也不成. 当然如果是新的数据库,想恢复成过去的一个resetlog之前的数据库,也不可以直接恢复,10g中已经支持重置为过去的数据库-当然过去的备份,日志都存在才能继续进行
5,rman restore controlfile from '一个新的备份片' -->当然选一个最新的备份集如果想恢复足够多的话. (也可以用rman来恢复spfile)--这是10g的新特性.9i,8i没有该rman命令,但可以使用backup_restore包手工取出来.
但是这样还有个问题,这个控制文件当然不包括这个备份集合和之后所有archivelog的信息. 所以,想让系统继续自动恢复很难. - 也可以手工恢复, 手工指定要使用的归档日志等.. 但还有个更简单的方法:
6,可以手工把之后的备份信息填入控制文件中.
catalog start with '备份集位置' --会把所有未加入控制文件的备份信息加入.
7,然后该咋恢复咋恢复 -- rman知道了归档日志的备份信息,当然可以一边解归档备份,一边恢复--但是,恢复完成后会自动删除临时解开的归档日志.
8,对于归档日志,也可以尝试手工解开归档.
控制文件没有该归档备份信息的时候(备份还在),可以使用backup_restore包--当然前面的先catalog更方便.
未来rman命令应该支持restore archivelog all from '备份文件' --但现在只支持tag方式,不支持文件名
如果想让解开的归档日志也加入控制文件(那样sqlplus等工具就可以自动继续恢复不用rman了)-alter database register archivelog ....
...
本文详细介绍了一次 Oracle 数据库灾难恢复的过程,包括控制文件、参数文件和密码文件的重建,以及如何通过 RMAN 备份进行不完全恢复。特别讨论了在 Windows 平台上的操作步骤,并提供了在 Unix/Linux 下的替代方案。

被折叠的 条评论
为什么被折叠?



