oracle 11.2.0.4
centos 6
我曾经遇到过这样一个问题, 生产的存储卡坏了(生产是 2个节点的RAC),需要在另一台服务器恢复数据库(非RAC),幸好我把归档日志保存了一份在本地磁盘。在还原旱,用 rman 做 restore 正常完成,但在做 recover 的时候,报错了(具体的错误号我忘了,但大概意思是找不到所需要的归档日志,但在新的服务器上的归档路径下有这归档日志文件),整了半天,就是不得行,后来,我用 sqlplus recover 成功了,命令如下:
sql> recover database using backup controlfile until cancel;
为什么为这样,我至今没有搞明白,请高手们分析一下。
如果你的oracle rman恢复是没有catalog,且在rman中的恢复仅仅是“recover database”的话,会出现你说的这个问题。
要想明白问题的原因,还得从这两句恢复命令出发:
recover database using backup controlfile until cancel;
在单一的recover database 或者 recover tablespace, recover datafile时, Oracle会以当前controlfile所记录的SCN为准,利用archive log和 redo log的redo entry, 把相关的datafile 的 block恢复到“当前controlfile所纪录的SCN”
而当前controlfile和current/active redo都丢失的情况下,你就需要使用你在SQLPLUS里输入的那句恢复命令,在很多情况下,由于datafile数据的不一致性,Oracle需要把数据恢复到比当前controlfile所纪录的SCN还要靠后的位置,简单的说,就是需要更多的归档。
如果你还能复现这个恢复场景,你查询下你报错的所需的归档,利用原来的controlfile进rman里list backup看一下就能知道了。
收起