Oracle支持多种方式来管理数据文件的备份与恢复来保证数据库的可靠与完整。除了使用RMAN工具以及第三方备份与恢复工具之外,基于用户管理的备份与恢复也是DBA经常使用的方式之一。本文首先介绍了恢复的相关概念,接下来详细讲述了在归档模式下使用基于用户管理恢复的处理过程。
一、恢复的相关概念
介质恢复
首先使用备份还原数据,然后再应用归档日志、重做日志的恢复方式称为介质恢复。
介质恢复能将一个经过还原的数据更新到当前的时间点或之前的某个时间点。
通常介质恢复这个术语专指对数据文件进行恢复的过程。
数据块的介质恢复指数据文件中的个别数据块出现错误时进行的特殊恢复操作。
介质恢复通常又可以分为完全恢复和不完全恢复
完全恢复
使用数据库,表空间或数据文件的备份进行还原,再使用归档,重做日志或增量备份将数据更新到当前时间点
用户可以实现基于对数据库、表空间、数据文件执行完全恢复
对整个数据库实现完全恢复的步骤
启动数据库到mount 状态
确保所有需要被恢复的数据文件处于联机(online)状态
还原数据库或需要恢复的数据文件
应用联机重做日志或/与归档重做日志
对表空间及数据文件实现完全恢复的步骤
如果数据库处于打开状态,应将需要恢复的表空间或数据文件置为脱机(offline)状态
还原需要恢复的数据文件
应用联机重做日志或/与归档重做日志
使表空间或数据文件联机
不完全恢复
与完全恢复是同样的步骤,只不过不完全恢复仅仅是将数据恢复到某一个特定的时间点或特定的SCN,而
不是当前时间点。下列情况通常需要进行不完全恢复:
介质故障(media failure)导致部分或全部联机重做日志(online redo log)损坏
用户操作失误(user error)导致数据丢失,例如,用户由于疏忽而移除了表,提交了无效的数据到表
由于归档重做日志(archived redo log)丢失而无法进行完全恢复(complete recovery)
当前控制文件(control file)丢失,必须使用备份的控制文件打开(open)数据库
不完全恢复的步骤
关闭数据库并备份数据库(以防止恢复失败)
启动数据库到mount 状态
还原所有受损的数据文件,同时可以选择还原控制文件
将数据库恢复至某个时间点、序列、或系统改变号
使用RESETLOGS关键字打开数据库
注意:
在做不完全恢复前建议在恢复前后做一次备份,避免恢复失败导致不必要的损失
不完全恢复完成后,建议不要直接使用OPEN RESETLOGS 命令以读/写模式打开(open)数据库,而应先以只读模式打开数据库,
并检查是否已将数据库恢复到正确的时间点。如果恢复的时间点有误,在没有使用OPEN RESETLOGS命令的情况下,重新执
行恢复操作相对简单。如果恢复结果早于指定的时间点,只需重新执行恢复操作。如果恢复结果超过了指定的时间点,则
应再次还原数据库并重新进行恢复。
Flashback Database(闪回数据库)是一种进行不完全恢复的方法
不完全介质恢复的几种类型:
基于时间的恢复(Time-based recovery)将数据恢复到指定的时间点
用户控制的恢复(Cancel-based recovery) 当用户提交CANCEL后停止恢复(此选项在使用RMAN时无效)
基于SCN 的恢复(Change-based recovery) 将数据恢复到指定的SCN
按重做日志序号恢复(Log sequence recovery)将数据恢复到指定的重做日志序号(仅使用RMAN时有效)
表空间按时间点恢复(tablespace point-in-time recovery,TSPITR)
可以将一个或多个表空间恢复到与数据库中其他表空间不同的时间点
TSPITR的适用情况:
因错误地移除(drop)及清除(truncate)表而进行的恢复
恢复存在逻辑错误的表
由于不正确的批处理作业或其他DML 语句导致数据库中部分数据有误,因而需要恢复
单独将某个方案(schema)恢复到与物理数据库中其他方案不同的时间点
(假设数据库中不同的方案使用不同的表空间)
恢复大型数据库(VLDB)中的一个表空间,而不必先使用备份复原整个数据库再执行所有前滚(roll-forward)操作