这一章描述在数据库恢复过程中用到的概念。
数据库恢复的类型
进程恢复和崩溃恢复:崩溃恢复指单实例数据库的崩溃后或RAC环境中所有数据库实例都崩溃后的恢复。而实例恢复指在RAC环境中,由目前存活的实例对崩溃实例进行的恢复。进程恢复和崩溃恢复的目标是恢复失败实例缓存中数据库的改变,关闭打开的重做线程。进程恢复和崩溃恢复只使用联机日志文件和当前的数据文件。进程恢复和崩溃恢复具有下面相同的特性:
1、对当前的联机数据文件重做修改;
2、只使用联机重做日志不使用归档重做日志;
3、恢复时间由崩溃实例个数,最后一次检查点后每个死的重做线程产生的重做日志数量,和一些用户配置决定。
Oracle在下列情况下自动执行恢复操作:
* 当发生崩溃后数据库第一次打开;
* Rac环境中一个或多个实例(不是全部)发生崩溃。
介质恢复:包括数据文件介质恢复和数据块介质恢复。
数据文件介质恢复:用于恢复数据文件或控制文件的丢失或破损。也用于恢复表空间非正常脱机造成的修改的丢失。介质恢复具有下列特性:
1、利用损坏数据文件的备份进行恢复;
2、可以像利用联机重做日志那样利用归档重做日志;
3、必须由用户显示的发起;
4、不会自动检查介质失败;
5、恢复的时间完全取决于用户的策略而不是Oracle的内部机制。
如果任何一个数据文件需要介质恢复则数据库无法打开,同时在介质恢复执行之前,需要介质恢复的数据文件无法联机。下列情况需要介质恢复:
1、还原了一个备份的数据文件;
2、还原了一个备份的控制文件;
3、数据文件没有使用OFFLINE NORMAL选项进行脱机。
数据块介质恢复:指在所有数据文件保持联机和可用的情况下对个别的数据块进行的还原和恢复。如果损坏仅限于个别数据文件的个别数据块,则数据块介质恢复比数据文件介质恢复要更合适。RMAN提供数据块介质恢复的接口。如果用户没有使用RMAN作为备份和恢复的解决方案,仍然可以将用户备份的数据文件和归档日志文件编入到RMAN的档案库中,然后利用RMAN进行数据块介质恢复。
恢复过程中应用重做日志
重做日志应用:Oracle把数据库缓冲中数据写到磁盘上是利用最近最少使用(LRU)算法的。这就意味着数据文件上可能包括一些还没有提交的事务的数据,而一些已经提交的事务的数据还没有来得及写入到数据文件上。则当发生数据库崩溃时可能出现下面两个问题:
1、一个事务提交时修改的数据块只写到了重做日志中,还没有写入到数据文件中。重做日志中的这些修改必须在恢复过程中再次应用到数据库中。
2、经过前滚阶段,数据文件中可能包括在数据库崩溃时还没有提交的事务的修改。这些没有提交的修改必须回滚来保证事务的一致性。而这些修改可能是数据库崩溃时留下的,也可能是前滚阶段引入的。
Oracle通过两个分别的步骤来解决这个两难问题:利用重做日志的前滚(缓存恢复)和利用回滚或UNDO段的回滚(事务恢复)。
缓存恢复:
联机重做日志是一组操作系统文件,记录着对数据、索引以及回滚段的所有的修改,并记录修改是否提交。所有对Oracle数据块的修改都会记录到重做日志中。
实例恢复的第一个步骤叫前滚恢复或缓存恢复。这个步骤中重做日志中记录的所有修改再次应用到数据文件中。由于回滚数据也记录在重做日志中,因此前滚同时产生对应的回滚数据。对于实例恢复前滚仅包括联机重做日志,对于介质恢复前滚可能包括联机重做日志和归档重做日志。
前滚结束后,数据块中包含所有提交的修改。但同时也包含未提交的修改,这些未提交的修改可能是实例崩溃的时候留下的,也可能是存在于重做日志中,在前滚阶段引入的。
事务恢复:
Undo数据块中记录着数据修改以前的内容。在恢复过程中,利用undo数据块来回滚所有未提交的事务。这个过程叫做回滚或事务恢复。
完整恢复和不完整介质恢复
完整恢复:利用重做日志或增量备份将数据块恢复到最接近当前时间的时间点。之所以叫做完整恢复是由于Oracle应用了归档日志和联机重做日志中所有的修改。
完全恢复一个数据库:
1、装载数据库;
2、保证所有需要恢复的数据文件联机;
3、还原整个数据库或用户希望恢复的数据文件;
4、应用联机日志或归档日志或二者全部。
完全恢复一个表空间或数据文件:
1、如果数据库是打开的,则将需要恢复的表空间和数据文件脱机;
2、还原所有需要恢复的数据文件;
3、应用联机日志和归档日志或二者全部。
不完整恢复:利用备份产生一个非当前版本的数据库。换句话说,恢复过程中不会应用备份产生后生成的所有的重做日志。通常在下列情况下生成整个数据库的不完整恢复:
1、介质失败损坏了几个或全部的联机重做日志文件;
2、用户操作造成的数据丢失,比如,用户误删除了一张表;
3、由于个别归档日志文件的丢失无法进行完整的恢复;
4、丢失了当前的控制文件,必须使用备份的控制文件打开数据库。
5、为了执行不完整介质恢复,必须使用恢复时间点以前的备份来还原数据文件,并在恢复完成后使用RESETLOG选项打开数据库。
表空间及时点恢复(TSPITR):使得用户可以将一个或多个表空间恢复到与数据库其余部分不一致的时间点。表空间及时点恢复使得用户可以:
1、恢复错误的删除表或截断表操作;
2、恢复一个逻辑损坏的表;
3、从一个只影响个别表空间的错误的批量工作或DML语句中恢复;
4、如果数据库中存在多个方案,且不同的方案分布在不同的表空间,则可以恢复独立的方案;
5、在一个非常大的数据库中恢复一个表空间。
不完整介质恢复选项:
基于时间的恢复:恢复数据到某个指定的时间;
基于取消的恢复:当用户发出取消语句时停止恢复;(不可用于RMAN);
基于改变的恢复:恢复到指定的SCN号;
日志序列恢复:恢复到某个指定的日志序列号(只用于RMAN)。
RMAN和用户管理的还原与恢复
RMAN的基础恢复命令包括:RESTORE和RECOVER。RESTORE用于数据文件的还原。而RECOVER命令执行介质恢复并应用归档日志或进行增量恢复。
用户管理的还原和恢复包括以下步骤:
1、如果数据库是打开的,需要保证所有数据文件处于脱机状态;
2、利用操作系统命令还原数据文件;
3、还原必要的归档日志文件;
4、利用RECOVER命令进行恢复。
yangtingkun 发表于:2006.01.10 23:53 ::分类: ( 读书笔记 ) ::阅读:(891次) :: 评论 (0)
-The End-