最近,一同事使用客户使用rman做的全备,进行rac到单机的恢复,但是恢复过程中提示报错ORA-01547&ORA-01194&ORA-01110,意思是恢复过程中缺少保存在内存undo中的数据。

一、问题现象

rman rac全备到单机的异机恢复过程中,提示报错ORA-01547&ORA-01194&ORA-01110。

ORACLE RMAN备份恢复报错ORA-01547&ORA-01194&ORA-01110_ORA-1547

二、问题分析

首先,看客户的rman备份日志,备份日志中显示备份的脚本命令。通过观察客户的rman备份,发现备份控制文件之前并没有切换日志,所以,部分数据会保留在redo和undo中未被归档,使用此类备份很有可能不完整。

ORACLE RMAN备份恢复报错ORA-01547&ORA-01194&ORA-01110_ORA-1194_02

问题排查过程中,查找了备份集中的最小的已归档的日志序列号:

ORACLE RMAN备份恢复报错ORA-01547&ORA-01194&ORA-01110_ORA-1110_03

rman使用指定sequence做恢复:

ORACLE RMAN备份恢复报错ORA-01547&ORA-01194&ORA-01110_数据库恢复_04

但是,恢复结束时,依旧提示报错,需要undo中的数据:

ORACLE RMAN备份恢复报错ORA-01547&ORA-01194&ORA-01110_数据库恢复_05

根据这种情况,到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 ;进行开库。

ORACLE RMAN备份恢复报错ORA-01547&ORA-01194&ORA-01110_ORA-1194_06

三、问题处理

重新恢复,并在restore完成后,查询数据库的最小SCN,恢复时指定最小SCN使数据库恢复到指定的SCN号,再进行resetlogs开库。

四、总结

rman备份时,尤其是完整备份时,在做最后的控制文件备份前,建议切换归档,将全部内存数据备份到归档,recover时执行数据库可恢复到的最小SCN处,可确保数据库恢复到备份时刻。