第十二章数据库的恢复
12.1 数据恢复概述
12.1.1数据库恢复的概念
重新安装一个数据文件或控制文件的物理备份就是重建它,并使它能够被Oracle数据库服务器所使用。恢复一个重建的数据文件就是使用归档重做日志和联机重做日志(备份后记录数据库变化)更新数据文件。如果用户使用Recovery Manager(RMAN),那么可以使用增量备份(incremental backup)来恢复重建的数据文件,增量备份是只包含最近一次备份以后发生改变的块的数据文件备份。
在需要的文件重建后,用户可以开始介质恢复。介质恢复可以使用归档重做日志和联机重做日志恢复数据文件。如果使用SQL*Plus,可以运行RECOVER命令执行恢复。如果使用RMAN,可以运行RMAN RECOVER命令执行恢复。
图12-1描述了备份、重建和在数据库上进行介质恢复的基本原理。
图12-1 重建和恢复数据库
不同于介质恢复,Oracle在一个实例失败后自动进行崩溃恢复和实例恢复,实例恢复和
530
崩溃恢复恢复数据库到实例发生前的事务一致状态。根据定义,崩溃恢复是在单实例配置或一个Oracle实时应用集中(所有实例崩溃)的数据库恢复。相反,实例恢复是在Oracle实时应用集中通过一个活动的实例恢复一个故障的实例。
崩溃和实例恢复是包含下列两个不同操作的自动过程:通过应用联机重复记录(包括已提交和未提交的事务)向前卷动当前的联机数据文件;然后回滚未提交的事务到它们的初始状态。因为崩溃恢复和实例恢复都是自动的,所以这里不讨论这些过程。
12.1.2 数据库恢复用的结构
在开始任何恢复过程前都必须熟悉在数据库恢复过程中使用的结构:
¾控制文件:它包含描述和维护数据库物理结构信息的记录,如数据库名、数据库建立时间、相关数据文件和联机重做日志文件的名称和位置、表空间信息、存档日志信息、数据文件拷贝信息、当前日志序号、检查点信息等。在数据库使用期间连续更新控制文件,在数据库打开时必须用于写操作。若控制文件不可取,则数据库将不能正确运行。
¾系统修改序号SCN:它是描述数据库提交版本的Oracle数据库时钟值。SCN运行为数据库的序列生成器,控制同时发生和重做日志的定制。
¾回滚段:它用于Oracle数据库操作中的许多功能,通常保存事务(未提交的事务)正在修改数据的旧值。在数据库恢复期间使用回滚段,撤消从重做日志应用到数据文件的未提交的修改。因此在需要数据库恢复时,使用回滚段从数据文件中去除所有未提交的数据后,数据处于一致的状态。
¾重做记录:它是一组描述对数据库个别修改向量,它为所有数据块修改而建造,保存在重做日志中。重做记录允许修改多个数据块,以便不管任意的故障而发生所有修改或没有修改。
¾重做日志:它记录在Oracle数据库进行的所有修改。包括两部分:联机重做日志和归档重做日志。
¾数据库备份:它包括组成Oracle数据库的物理文件(所有数据文件和控制文件)的备份。为了从介质故障开始介质恢复,Oracle使用文件备份来恢复损坏的数据文件或控制文件。
¾增量备份(只对于Recovery Manager):它包括一个或多个只包含自上次备份以来已经修改的那些块的数据文件。
¾恢复目录(只对于Recovery Manager):它是由Recovery Manger 使用和维护的信息仓库。包含的文件有:数据文件和归档日志备份集和块,数据文件拷贝,归档重做日志及其拷贝,目标数据库的表空间和数据文件,用户建立的存储的脚本。
¾检查点(checkpoint):它是控制文件中定义跨所有重做日志线索的数据库一致点的数据结构。检查
点类似于SCN,也描述哪个线索存在于SCN。恢复使用检查点以确保Oracle 在正确点上为重做应用程序开始读日志线索。
12.2 恢复的原则
这部分介绍在数据库恢复期间使用的一些结构,内容包括:
531
¾恢复的类型
¾恢复期间的应用重做
¾完全和不完全的介质恢复
¾RMAN 和用户管理的重建和恢复
12.2.1 Oracle恢复的类型
一、实例和故障恢复
崩溃恢复是在单实例数据库崩溃或一个Oracle实时应用集中(所有实例崩溃)的数据库恢复。实例恢复是在Oracle实时应用集中通过一个活动的实例恢复一个故障的实例。
实例和故障恢复的目标是重建处于死的实例的缓存的修改了的数据块,并且关闭了仍然打开的重做线程。实例和故障恢复只使用联机重做日志文件和当前的联机数据文件。Oracle 也恢复死的实例的重做线程。
实例和故障恢复有以下的共同特征:
¾使用当前联机数据文件重做修改(在崩溃或异常退出后留在磁盘上的操作)。
¾只使用联机重做日志,不需要归档日志。
¾根据死实例的数量,自上次检查点后每个死的重做线程产生重做的数量,和用户配置信息如重做日志文件的数量和大小、检查点的频率、并行恢复设置等,有一个恢复时间。
Oracle在两种情况下自动执行这种恢复:
¾在单实例数据库崩溃后,或一个Oracle实时应用集中所有实例崩溃后(崩溃恢复)第一次打开数据库。在正常关机后,Oracle在控制文件设置一个标记。在启动时侦测到控制文件的标记表明没有进行正常关闭,Oracle 会自动执行崩溃恢复。
¾当一些实例(不是所有的)在实时应用集中出现故障(实例故障)。通过配置中的或的实例,恢复自动执行。
重要的是在实例和故障恢复中,Oracle自动使用重做而不需用户干涉。然而可以设置数据库服务器的参数调整实例和故障恢复执行的时间。同样,也可以分别单独调整实例恢复前卷和回滚的阶段。最后,可以调整检查点使恢复时间优化。
二、介质恢复
介质恢复分为下列类型:
¾数据文件介质恢复
¾块介质恢复
一般来说,"介质恢复"指数据文件恢复。块介质恢复只能在RMAN中执行,需要特殊的操作。
1、数据文件的介质恢复
数据文件的介质恢复用于从丢失或损坏的当前数据文件或控制文件中恢复。也可以用于恢复恢复丢失的
修改(当没有使用OFFLINE NORMA选项而表空间脱机时)。数据文件的介质恢复和实例恢复都需要修改数据库的完整性。介质恢复有以下的特征:
z使用损坏的数据文件的重建备份应用需要的修改
532
z可以使用归档日志和联机日志
z由用户发起执行
z不能自动侦测介质故障(也就是说,需要重建一个备份)。在备份重建后,侦测是否需要通过介质恢复来恢复是自动的
z只是根据用户的策略(如备份的频率,并行恢复的参数)而不是Oracle内部机制来决定恢复时间
如果任何联机数据文件需要介质恢复,那么数据库不能打开,一个需要介质恢复的数据文件也不能联机直到介质恢复执行完成。下面的情形必然要进行介质恢复:z重建数据文件的备份
z重建一个控制文件的备份
z没有使用带OFFLINE NORMAL选项,一个数据文件脱机(用户或者Oracle自动) 除非数据库没有被任何实例打开,数据文件的介质恢复只能运行在脱机的数据文件。在打开数据库前(甚至当崩溃恢复已经能够满足要求时)可以启动数据文件的介质恢复。如果这样,崩溃恢复在数据库打开时自动运行。
注意:当一个文件需要介质恢复时,即使所有需要的修改已经包含在联机日志中,还是必须实施介质恢复。也就是说,尽管归档日志不需要,仍然必须运行恢复。如果调用不需要恢复的文件,介质恢复会发现无事可做并且标记"no recovery required"错误。
truncate的数据如何恢复
2、块介质恢复
当所有的数据库文件保持联机和可用的时候,块介质恢复重建和恢复单独的数据块。如果损坏只是在数据库文件子集的一些块,那么块介质恢复比数据文件恢复更好。
执行块介质恢复的接口是RMAN,如果没有使用 RMAN 作为主要的备份和恢复方法,可以通过把需要的用户管理数据文件和归档重做日志备份编目到RMAN 知识库,来执行块介质恢复。
12.2.2 恢复期间的重做应用
通过把重做数据应用到数据文件,执行介质恢复。无论何时数据文件发生了修改,变化首先记录在联机重做日志。介质恢复有选择的把记录在联机和归档日志中的修改应用到重建文件,使它前卷。
一、关于重做应用
在SGA的高速缓存中的数据库缓冲区只在需要的时候才写到磁盘上,采用least-recently-used (LRU)算法。因为数据库writer进程使用这种算法把数据库缓冲区写到数据文件上,数据文件上可能包含一些未提交事务修改的数据块和已提交事务修改丢失的数据块。
一个实例故障发生后,可能出现以下两种情况:
¾事务修改的数据块在提交时不写到数据文件上,因此修改只可能出现在重做日志中。因此重做日志包含有恢复时必须重新应用到数据库文件的修改。
¾在前卷阶段,数据文件可能包含故障时没有提交的修改。这些未提交的修改必须回滚以确保事务的一致性。这些修改或者保存在故障前的数据文件中,或者在前卷阶段被引如。
为解决这个问题,在实例或介质故障恢复期间,Oracle 总是使用两个单独的步骤:使用
533
重做日志向前卷(缓存恢复)和使用回滚段或取消段回滚(事务恢复)。
二、高速缓存恢复
联机重做日志是操作系统文件集,它记录对任何数据库缓冲区的修改,包括数据、索引和回滚段,无论这些修改是否提交。对Oracle 数据库的所有修改记录在联机日志上。
从实例或介质故障恢复的第一个阶段叫高速缓存恢复或向前滚,它应用重做日志中记录的所有修改到相应的数据文件。因为回滚的数据也记录在重做日志中,向前滚也重新产生相应的回滚段。
只要重做日志需要就继续使用重做日志文件向前滚,将数据库返回到所需的时间。前滚通常包括联机重做日志文件(实例或介质恢复),也可能包括归档重做日志文件(只在介质恢复)。
在向前滚后。数据块包含所有提交的修改,也可能包含故障时没有提交的修改(保存在故障前的数据文件中或记录在重做日志中在缓存恢复时引入)。
三、事务恢复
Oracle 可以运行在手动取消管理模式下或自动取消管理模式下。在手动取消管理模式下,必须创建和管理回滚段记录数据库修改前的映像。在自动取消管理模式下 ,建立一个或多个取消表空间,它也包含和传统回滚段相似的取消段。它们的主要区别是由Oracle 管理取消。
取消块(在回滚段或取消表空间) 记录在某些数据库操作中可能会取消的数据库动作。在数据库恢复中,取消块回滚未提交事务的影响(以前由前滚阶段应用)。
在前滚后,任何未提交的修改必须取消。Oracle 使用取消块回滚数据块中未提交的修改,这些修改或者是在崩溃前写入,或者在缓存恢复过程中被重做应用所引入。这个过程叫回滚或事务恢复。
图12-2描述了前滚和回滚操作,在任何类型的系统故障都需要的两个步骤。
需要恢复的数据库备份 包含提交和未提交事务的数据库只有提交事务的数据库 提交的事务
未提交的事务
图12-2 恢复的基本步骤:前滚和回滚
根据需要,Oracle 可以同时回滚多个事务。故障时活动的所有事务标记为DEAD 。并不是等待SMON 回滚死的事务,新事务可以自动恢复堵住的事务获取它们需要的行锁。 12.2.3 完全和不完全介质恢复
介质恢复更新备份到当前时间或过去的指定时间。执行介质恢复,可以恢复整个数据库,

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。