经常看到很多资料用oracle做不完全恢复时,总会用到如下方式
1. 执行RECOVER命令,将数据库恢复到指定的时间点。在执行命令后,Oracle将尝试应用日志文件,使数据库恢复到指定时间点。
2. 最后,打开数据库,使其处于可读写状态,命令如下:
RECOVER DATABASE UNTIL TIME 'yyyy-mm-dd hh:mi:ss' CANCEL;
ALTER DATABASE OPEN;
第一次使用不完全恢复时,总是直接按照文档执行,最终到处碰壁,耽误时间。这里总结了这种问题的解决思路。
任何操作一定是在具体场景和前提下才可以使用,否则盲目的命令的操作就是断章取义。
我们设置具体场景Oracle数据库中的"闪回"功能已关闭,并且没有备份文件可用,只有完整的归档日志和redo日志,恢复到之前的某个时间点。在这种情况下,无法直接使用归档日志和redo日志进行时间点恢复。
原因很简单,备份是恢复的起点,ORACLE不能从当前的时间点,倒推日志恢复到之前的某个时间点。这点尤为重要。我们不能想当然认为,只要开启归档模式,ORACLE就能根据归档日志恢复数据,这只是片面想法。恢复备份也就是把当前的数据全部删除,用之前的备份覆盖,然后再在这个基础上,正向执行归档日志。数据才能被恢复到之前的某时间点。
有了这个原来概念,我们知道不可能直接执行recover命令用归档日志直接恢复。必须在recover之前先执行restore或手工复制,然后再用recover恢复数据。最后恢复数据后,日志文件需要重新记录日志号,要用resetlogs方式打开。不能直接用alter database open方式打开。