上周一直在忙数据库灾难恢复演练。在模拟丢失控制文件、数据文件、日志文件的情况中,依靠上次全备份进行恢复。最近一次备份是全备份,备份了数据文件,控制文件,归档日志文件。
在恢复的时候,成功恢复了控制文件。该控制文件应该是上次做完全备份的版本。(写在RMAN备份脚本最后,应该是备份完了所有文件再备份控制文件吧)。在恢复数据库时,使用这个版本的控制文件,按我的理解,数据库应该是认为自己做的完全恢复,而不是不完全恢复。restore database的时候一切正常,restore只是把备份集中备份的数据文件恢复到应有的目录中。而recover database时却报错。我理解的recover操作是利用归档日志文件对数据库状态进行前滚,然后根据控制文件记录的状态,将未提交的操作回滚。recover时报错,提示需要下一个归档日志文件,疑问由此产生,控制文件是做好全备份才backup的,为什么需要下一个日志?直接把数据库recover到上次RMAN备份完成的状态不行吗?
recover操作失败以后,没有理会,直接open database resetlogs;数据库正常启动。不知道为什么?
后我在自己的环境中测试,在开始备份前记录系统scn,假设为1。开始备份,在备份进行过程中,对一些表数据进行更改,假设更改后SCN为5,过了一段时间备份完成,记录SCN为10.模拟以上故障情况进行恢复,也是recover操作报错。resetlogs打开数据库后,SCN状态为5-10之前的状态。备份过程中更改的数据没有丢失。分析后我认为,这种情况的数据恢复,数据库就是恢复到RMAN备份完成的时间点,也就是最后一次备份控制文件的时间点。至于为什么recover回报错,而直接resetlog打开数据库就可以了,希望有想的通的朋友指点一下。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7969839/viewspace-631357/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7969839/viewspace-631357/