分类: Oracle
2010-03-29 21:02:20
实例恢复和CRASH恢复:恢复故障实例在CACHE中改变的块,并关闭对应的OPEN状态的REDO线程。只需要使用当前日志文件以及当前在线数据文件。
介质(media)恢复:分为两种,数据文件介质恢复和块介质恢复。一般介质恢复指数据文件恢复,块介质恢复是仅仅在RMAN中使用的术语。
*数据文件介质恢复:指数据文件或控制文件丢失或损坏后的恢复,也指非NORMAL OFFLINE的表空间的恢复。
数据库在非OPEN状态时,只能对OFFLINE的数据文件进行介质恢复。这样,在打开数据库之前就完成了介质恢复。在OPEN时,如果需要,会自动运行crash恢复。
*块介质恢复:指在数据文件正常在线情况下,恢复并修复独立的部分数据块。若损坏可限定为几个数据文件的一些数据块,可使用块介质恢复方法修复。
块介质恢复接口由RMAN提供。若你并未将RMAN作为备份和恢复的主要方法,仍可通过如下方法使用块介质恢复:将用户管理的数据文件和归档日志文件的备份目录编进RMAN仓库中。
参考《oracle9i recovery manager uesr’s guide》,学习如何将用户管理的数据文件和归档日志文件的备份目录编进RMAN仓库中,并实施块介质备份。
关于redo application:分为ROLLFORWARD和ROLLBACK两个阶段。
Cache恢复:又称为rolling forward。
事务恢复:又称为rolling back。
完全恢复:可以在数据库、表空间、数据文件实施完全恢复。
若对整个数据库实施完全恢复,无论是用RMAN还是SQL*PLUS,都必须:
*MOUNT数据库
*所有要恢复的数据文件都为ONLINE
*使用备份恢复整个数据库,或恢复指定的文件
*使用在线日志或归档日志,或都使用。
若对表空间或数据文件实施完全恢复,必须:
*在数据库OPEN状态下,将要恢复的表空间或数据文件OFFLINE
*使用备份恢复数据文件
*使用在线日志或归档日志,或都使用。
不完全恢复:将数据库恢复到非当前状态(某一时间点)。
以下几种情况下,使用不完全恢复:
*部分或全部在线日志损坏
*用户错误导致数据丢失(例如,误删了表)
*由于某个归档日志文件丢失,导致无法完全恢复
*当前控制文件丢失,必须使用备份的控制文件启动数据库。
要实现不完全恢复,必须将备份文件中的所有数据文件恢复到指定的某时间点上,恢复结束后,使用RESETLOGS打开数据库(因为是完全恢复,以前的在线日志和归档日志已经失效)。
基于时间点的表空间的恢复(TSPITR):可将某个或多个表空间恢复到指定时间点状态。如下情况可考虑使用TSPITR:
*误DROP或TRUNCATE表的恢复
*恢复逻辑损坏(logically corrupted)的表
*执行了错误的批处理脚本或DML,但只影响数据库的一部分。
*将某个独立的SCHEMA恢复到指定时间点,数据库的其他部分不变。
*在超大数据库(VLDB)恢复某个表空间比恢复整个数据库,再使用归档进行roll forward要快得多。
参考文档:《oracle9i user-managed backup and recovery guide》、《oracle9i recovery manager user’s guide》关于TSPITR的部分。
Media恢复选项:由于是不完全恢复,你必须告诉ORACLE何时停止恢复。相关类型如下表:
Type of Recovery |
Function |
Time-based recovery |
Recovers the data up to a specified point in time. |
Cancel-based recovery |
Recovers until you issue the CANCEL statement (not available when using Recovery Manager). |
Change-based recovery |
Recovers until the specified SCN. |
Log sequence recovery |
Recovers until the specified log sequence number (only available when using Recovery Manager). |
物理文件基本的恢复方法有两种,都可以恢复数据库、表空间、数据文件:
*RMAN工具恢复和修复
*使用操作系统命令恢复数据库,然后使用RECOVER命令修复
恢复前需要知道那些数据文件需要recovery。通常可以通过查询表v$recover_file,该表列出了所有需要recovery的表,以及需要recovery的原因。
RMAN恢复和修复:基本命令是restore和recover。Restore命令从备份集中或镜像拷贝中将数据文件恢复到当前位置或指定新位置,也可以恢复包括归档日志的备份集。Recover命令完成recovery并应用归档日志或增量备份。
RMAN的restore和recovery都是自动完成的。例如,如下命令即可将数据库恢复到当前状态:
SHUTDOWN IMMEDIATE; # shuts down database
STARTUP MOUNT; # starts and mounts database
RESTORE DATABASE; # restores all datafiles
RECOVER DATABASE; # recovers database using all available redo
ALTER DATABASE OPEN; # reopens the database
用户管理的恢复和修复:遵循如下步骤
1)识别出损坏文件后,将数据库设置到合适的状态。例如,某个数据文件损坏,则在数据库OPEN状态下将对应的表空间OFFLINE。
2)使用操作系统命令恢复。若此时没有对应的备份文件,也可以恢复,条件是:有该数据文件开始创建时至现在的归档日志,以及包括该数据文件的控制文件。
若不能将数据文件恢复到原来的位置(例如,磁盘损坏),可重新部署该数据文件的位置,并改变其在控制文件中的路径。
3)恢复所有必须的归档日志文件
4)使用SQL*PLUS的RECOVER命令修复数据文件。