最近,一同事使用客户使用rman做的全备,进行rac到单机的恢复,但是恢复过程中提示报错ORA-01547&ORA-01194&ORA-01110,意思是恢复过程中缺少保存在内存undo中的数据。
一、问题现象
rman rac全备到单机的异机恢复过程中,提示报错ORA-01547&ORA-01194&ORA-01110。
二、问题分析
首先,看客户的rman备份日志,备份日志中显示备份的脚本命令。通过观察客户的rman备份,发现备份控制文件之前并没有切换日志,所以,部分数据会保留在redo和undo中未被归档,使用此类备份很有可能不完整。
问题排查过程中,查找了备份集中的最小的已归档的日志序列号:
rman使用指定sequence做恢复:
但是,恢复结束时,依旧提示报错,需要undo中的数据:
根据这种情况,到oracle mos官网查询发现文档Open Database failed - DATAFILE NEEDS MORE RECOVERY TO BE CONSISTENT ORA-1194 ORA-1547 ORA-1110 (Doc ID 1528788.1) ;文档说明针对客户提供的备份集,需要restore完成之后,查询数据库的最小SCN,recover时指定查到的最小SCN或者执行 RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL ;然后,再执行alter database open resetlogs ;进行开库。
三、问题处理
重新恢复,并在restore完成后,查询数据库的最小SCN,恢复时指定最小SCN使数据库恢复到指定的SCN号,再进行resetlogs开库。
四、总结
rman备份时,尤其是完整备份时,在做最后的控制文件备份前,建议切换归档,将全部内存数据备份到归档,recover时执行数据库可恢复到的最小SCN处,可确保数据库恢复到备份时刻。