#RECOVER DATABASE

# 通用描述

RECOVER DATABASE用于从备份集和归档日志/在线日志还原数据库到指定时间点的状态,其中:

RECOVER DATABASE=完全恢复。

RECOVER DATABASE UNTIL|FROM ...=不完全恢复。

只能在数据库状态为MOUNT时执行RECOVER,且在RECOVER之前必须先执行RESTORE将数据库恢复到备份集的状态。

RECOVER操作要求在备份集生成时间之后且指定时间点之前的归档日志必须存在。

如果执行了不完全恢复,RECOVER之后打开数据库需使用ALTER DATABASE OPEN RESETLOGS语句,用于重置redo时间线。

关于备份恢复的详细操作描述请参考运维手册备份恢复

分布式部署中,用户无法执行本语句。

# 语句定义

recover database::=

syntax
RECOVER DATABASE UNTIL TIME date SCN scn CANCEL FROM SEQUENCE integer

# until time

该语句用于将数据库恢复到此指定的时间点,date格式需与DATE_FORMAT参数定义的格式一致。

指定的时间点必须在备份集生成时间之后。

# until scn

该语句用于将数据库恢复到此指定的SCN号。指定的SCN号必须大于备份集中记录的SCN号。

# until cancel

该语句用于数据库正常启动失败,无法恢复到一致性状态,可以使用该语句强制启动。

注意:该语句为高危操作,使用该语句强制启动数据库后,数据库可能会产生各种无法预料的故障,例如:宕机、事务不一致等。

当数据库无法恢复到一致性状态时,优先考虑其他恢复手段,最后考虑该恢复手段。

# from sequence

该语句用于数据库从指定的日志序列号开始恢复,指定的日志序列号不能大于当前数据库的恢复点,需保证指定序列号之后的日志存在。

示例

--启动数据库到NOMOUNT状态,然后执行restore操作
RESTORE DATABASE FROM 'backup';
 
--RESTORE操作成功后数据库启动到MOUNT状态
RECOVER DATABASE UNTIL TIME TO_DATE('2021-11-25 18:55:00','yyyy-mm-dd hh24:mi:ss');
 
--打开数据库
ALTER DATABASE OPEN RESETLOGS;