最近在试验一个备份策略,利用共享目录,将生产库的归档日志做一个异地冗余,另外每个工作日的凌晨对生产库做一个冷备份到这共享目录上,冷备前将共享目录里的归档日志清楚,这样当生产库彻底崩溃的时候,就可以利用这些冷备份及后续的归档日志来进行一个异地不完全恢复,整个原理其实类似于Data Guard,只不过备用库是关闭状态的,只有在主库无法恢复时,才在备用库上进行异地恢复。具体的恢复步骤如下:
1、备用库是实现建好的,因此冷备文件和归档日志都在备用库所定义的位置上,并且备用库归档日志的命名格式也是跟生产库一致的;
2、恢复前要根据备用库的参数设置进行一些预处理,比如我的生产库上控制文件有四份,重做日志每组有两个文件,但冷备拷贝过来的只有两份控制文件和每个组的其中一个重做日志文件(不是偷懒,主要是想尽量缩短冷备停机的时间),而备用库里定义的控制文件有三个,预处理就是生成第三个控制文件的副本及每个重做日志组的第二个文件;
3、一切就绪后,将数据库启动到mount状态,然后进行控制文件修改,为什么呢?因为第一控制文件里记录了SCN和归档文件序号等重要信息,如果重建控制文件的话,这些信息就丢失了,会影响后续归档日志文件的应用;另外由于备用库的文件存储路径跟生产库不一样,因此要执行alter database rename file '...' to '...'语句来修改日志文件和数据文件的位置;再有就是备用库是不需要打开归档日志模式的,所以要执行alter database noarchivelog语句来关闭归档日志模式;如果生产库还有一些其它特性(比如flashback)要取消,也在这里做掉!
4、接着执行recover database using backup controlfile until cancel;来进行数据库恢复,这条语句的意思是:如果丢失当前controlfile并且current/active redo都丢失,会先去自动应用归档日志,可以实现最大的恢复;
5、然后执行alter database open resetlogs;来打开数据库,因为重做日志是旧的需要重置,所以要用resetlogs;
6、最后别忘了添加临时表空间的临时文件哦,比如:ALTER TABLESPACE TEMP ADD TEMPFILE '/apps/oracle/oradata/ORCL/temp01.dbf' SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
好,经过以上6部,备用库就起来了,并且应用了所有的归档日志,将数据库异地恢复到最后一次成功归档的时刻!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/108247/viewspace-462862/ ,如需转载,请注明出处,否则将追究法律责任。