o数据库技术第12章的恢复_第1页
o数据库技术第12章的恢复_第2页
o数据库技术第12章的恢复_第3页
o数据库技术第12章的恢复_第4页
o数据库技术第12章的恢复_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十二章数据库的恢复12.1数据恢复概述12.1.1 数据库恢复的概念重新安装一个数据文件或 文件的物理备份就是重建它,并使它能够被 Oracle 数据库服务器所使用。恢复一个重建的数据文件就是使用归档重做日志和联机重做日志(备份后记录数据库变化)更新数据文件。如果用户使用 Recovery Manager(RMAN),那么可以使用增量备份(incremental backup)来恢复重建的数据文件,增量备份是只包含最近一次备份以后发生改变的块的数据文件备份。在需要的文件重建后,用户可以开始介质恢复。介质恢复可以使用归档重做日志和联机重做日志恢复数据文件。如果使用 SQL*Plus,可以运行

2、RECOVER 命令执行恢复。如果使用RMAN,可以运行 RMAN RECOVER 命令执行恢复。图 12-1 描述了备份、重建和在数据库上进行介质恢复的基本原理。图 12-1 重建和恢复数据库不同于介质恢复,Oracle 在一个实例失败后自动进行恢复和实例恢复,实例恢复和530恢复恢复数据库到实例发生前的事务一致状态。根据定义,恢复是在单实例配置或一个 Oracle 实时应用集群中(所有实例)的数据库恢复。相反,实例恢复是在 Oracle 实时应用集群中通过一个活动的实例恢复一个故障的实例。和实例恢复是包含下列两个不同操作的自动过程:通过应用联机重复(包括已提交和未提交的事务)向前卷动当前的

3、联机数据文件;然后回滚未提交的事务到它们的初始状态。因为恢复和实例恢复都是自动的,所以这里不讨论这些过程。12.1.2 数据库恢复用的结构在开始任何恢复过程前都必须熟悉在数据库恢复过程中使用的结构:文件:它包含描述和维护数据库物理结构信息的,如数据库名、数据库建¾立时间、相关数据文件和联机重做日志文件的名称和位置、表空间信息、存档日志信息、数据文件拷贝信息、当前日志序号、检查点信息等。在数据库使用期间连续更新文件,在数据库打开时必须用于写操作。若文件不可取,则数据库将不能正确运行。Ø 系统修改序号 SCN:它是描述数据库提交版本的 Oracle 数据库时钟值。SCN 运行为

4、数据库的序列,同时发生和重做日志的定制。Ø 回滚段:它用于 Oracle 数据库操作中的许多功能,通常保存事务(未提交的事务) 正在修改数据的旧值。在数据库恢复期间使用回滚段,撤消从重做日志应用到数据文件的未提交的修改。因此在需要数据库恢复时,使用回滚段从数据文件中去除所有未提交的数据后,数据处于一致的状态。Ø 重做:它是一组描述对数据库个别修改向量,它为所有数据块修改而建造,保存在重做日志中。重做有修改。Ø 重做日志:它归档重做日志。修改多个数据块,以便不管任意的故障而发生所有修改或没在 Oracle 数据库进行的所有修改。包括两部分:联机重做日志和Ø

5、 数据库备份:它包括组成 Oracle 数据库的物理文件(所有数据文件和文件)的备份。为了从介质故障开始介质恢复,Oracle 使用文件备份来恢复损坏的数据文件或件。文Ø 增量备份(只对于 Recovery Manager):它包括一个或多个只包含自上次备份以来已经修改的那些块的数据文件。Ø 恢复目录(只对于 Recovery Manager):它是由 Recovery Manger 使用和维护的信息仓库。包含的文件有:数据文件和归档日志备份集和块,数据文件拷贝,归档重做日志及其拷贝,目标数据库的表空间和数据文件,用户建立的的。Ø 检查点(checkpoint):

6、它是文件中定义跨所有重做日志线索的数据库一致点的数据结构。检查点类似于 SCN,也描述哪个线索存在于 SCN。恢复使用检查点以确保 Oracle在正确点上为重做应用程序开始读日志线索。12.2恢复的原则这部分介绍在数据库恢复期间使用的一些结构,内容包括:531Ø 恢复的类型Ø 恢复期间的应用重做Ø 完全和全的介质恢复Ø RMAN 和用户管理的重建和恢复12.2.1 Oracle 恢复的类型一、实例和故障恢复恢复是在单实例数据库或一个 Oracle 实时应用集群中(所有实例)的数据库恢复。实例恢复是在 Oracle 实时应用集群中通过一个活动的实例恢复一个

7、故障的实例。实例和故障恢复的目标是重建处于死的实例的缓存的修改了的数据块,并且关闭了仍然打开的重做线程。实例和故障恢复只使用联机重做日志文件和当前的联机数据文件。Oracle 也恢复死的实例的重做线程。实例和故障恢复有以下的共同特征:Ø 使用当前联机数据文件重做修改(在或异常后留在磁盘上的操作)。Ø 只使用联机重做日志,不需要归档日志。Ø 根据死实例的数量,自上次检查点后每个死的重做线程产生重做的数量,和用户配置信息如重做日志文件的数量和大小、检查点的频率、并行恢复设置等,有一个恢复时间。Oracle 在两种情况下自动执行这种恢复:Ø 在单实例数据库后,

8、或一个 Oracle 实时应用集群中所有实例后(恢复)第一次打开数据库。在正常关机后,Oracle 在文件设置一个标记。在启动时侦测到文件的标记表明没有进行正常关闭,Oracle 会自动执行恢复。Ø 当一些实例(不是所有的)在实时应用集群中出现故障(实例故障)。通过配置中的或的实例,恢复自动执行。重要的是在实例和故障恢复中,Oracle 自动使用重做而不需用户。然而可以设置数据库服务器的参数调整实例和故障恢复执行的时间。同样,也可以分别单独调整实例恢复前卷和回滚的阶段。最后,可以调整检查点使恢复时间优化。二、介质恢复介质恢复分为下列类型:Ø 数据文件介质恢复Ø 块

9、介质恢复一般来说,"介质恢复"指数据文件恢复。块介质恢复只能在 RMAN 中执行,需要特殊的操作。1、数据文件的介质恢复数据文件的介质恢复用于从丢失或损坏的当前数据文件或文件中恢复。也可以用于恢复恢复丢失的修改(当没有使用 OFFLINE NORMA 选项而表空间脱机时)。数据文件的介质恢复和实例恢复都需要修改数据库的完整性。介质恢复有以下的特征:l 使用损坏的数据文件的重建备份应用需要的修改532zzz可以使用归档日志和联机日志由用户发起执行不能自动侦测介质故障(也就是说,需要重建一个备份)。在备份重建后,侦测是否需要通过介质恢复来恢复是自动的只是根据用户的策略(如备份的

10、频率,并行恢复的参数)而不是 Oracle 内部机制来决定恢复时间z如果任何联机数据文件需要介质恢复,那么数据库不能打开,一个需要介质恢复的数据文件也不能联机直到介质恢复执行完成。下面的情形必然要进行介质恢复:zzz重建数据文件的备份重建一个文件的备份没有使用带 OFFLINE NORMAL 选项,一个数据文件脱机(用户或者 Oracle 自动)除非数据库没有被任何实例打开,数据文件的介质恢复只能运行在脱机的数据文件。在打开数据库前(甚至当恢复已经能够满足要求时)可以启动数据文件的介质恢复。如果这样,恢复在数据库打开时自动运行。2、块介质恢复当所有的数据库文件保持联机和可用的时候,块介质恢复重

11、建和恢复单独的数据块。如果损坏只是在数据库文件子集的一些块,那么块介质恢复比数据文件恢复更好。执行块介质恢复的接口是 RMAN,如果没有使用 RMAN 作为主要的备份和恢复方法, 可以通过把需要的用户管理数据文件和归档重做日志备份编目到 RMAN 知识库,来执行块介质恢复。12.2.2 恢复期间的重做应用通过把重做数据应用到数据文件,执行介质恢复。无论何时数据文件发生了修改,变化首先在联机重做日志。介质恢复有选择的把在联机和归档日志中的修改应用到重建文件,使它前卷。一、关于重做应用在 SGA 的高速缓存中的数据库缓冲区只在需要的时候才写到磁盘上,采用least-recently-used (L

12、RU)算法。因为数据库 writer 进程使用这种算法把数据库缓冲区写到数据文件上,数据文件上可能包含一些未提交事务修改的数据块和已提交事务修改丢失的数据块。一个实例故障发生后,可能出现以下两种情况:Ø 事务修改的数据块在提交时不写到数据文件上,因此修改只可能出现在重做日志中。因此重做日志包含有恢复时必须重新应用到数据库文件的修改。Ø 在前卷阶段,数据文件可能包含故障时没有提交的修改。这些未提交的修改必须回滚以确保事务的一致性。这些修改或者保存在故障前的数据文件中,或者在前卷阶段被引如。为解决这个问题,在实例或介质故障恢复期间,Oracle 总是使用两个单独的步骤:使用注意

13、:当一个文件需要介质恢复时,即使所有需要的修改已经包含在联机日志中,还是必须实施介质恢复。也就是说,尽管归档日志不需要,仍然必须运行恢复。如果调用不需要恢复的文件,介质恢复会发现无事可做并且标记"no recovery required"错误。533重做日志向前卷(缓存恢复)和使用回滚段或取消段回滚(事务恢复)。二、高速缓存恢复联机重做日志是操作系统文件集,它对任何数据库缓冲区的修改,包括数据、索引和回滚段,无论这些修改是否提交。对 Oracle 数据库的所有修改在联机日志上。从实例或介质故障恢复的第一个阶段叫高速缓存恢复或向前滚,它应用重做日志中的所有修改到相应的数据文件

14、。因为回滚的数据也应的回滚段。在重做日志中,向前滚也重新产生相只要重做日志需要就继续使用重做日志文件向前滚,将数据库返回到所需的时间。前滚通常包括联机重做日志文件(实例或介质恢复),也可能包括归档重做日志文件(只在介质恢复)。在向前滚后。数据块包含所有提交的修改,也可能包含故障时没有提交的修改(保存在故障前的数据文件中或在重做日志中在缓存恢复时引入)。三、事务恢复Oracle 可以运行在手动取消管理模式下或自动取消管理模式下。在手动取消管理模式下,必须创建和管理回滚段数据库修改前的映像。在自动取消管理模式下 ,建立一个或多个取消表空间,它也包含和传统回滚段相似的取消段。它们的主要区别是由 Or

15、acle 管理取消。取消块(在回滚段或取消表空间)在某些数据库操作中可能会取消的数据库动作。在数据库恢复中,取消块回滚未提交事务的影响(以前由前滚阶段应用)。在前滚后,任何未提交的修改必须取消。Oracle 使用取消块回滚数据块中未提交的修改,这些修改或者是在或事务恢复。前写入,或者在缓存恢复过程中被重做应用所引入。这个过程叫回滚图 12-2 描述了前滚和回滚操作,在任何类型的系统故障都需要的两个步骤。重做日志重做日志数据库数据库数据库应用重做日志撤消块被应用包含提交和未提交事务的数据库只有提交事务的数据库提交的事务未提交的事务需要恢复的数据库备份图 12-2 恢复的基本步骤:前滚和回滚根据需

16、要,Oracle 可以同时回滚多个事务。故障时活动的所有事务标记为 DEAD。并不是等待 SMON 回滚死的事务,新事务可以自动恢复堵住的事务获取它们需要的行锁。12.2.3完全和全介质恢复介质恢复更新备份到当前时间或过去的指定时间。执行介质恢复,可以恢复整个数据库,534一个表空间或一个数据文件。在任何情况下,用户总是使用重建的备份来实施恢复。一、完全恢复完全恢复包括使用重做数据或增量备份,与数据库表空间或数据文件的备份组合起来来更新为当前及时点。它被称为是完全的,这是因为 Oracle 把所有重做变化(包括在归档和联机日志中)应用到备份中。通常用户在介质故障损坏数据文件或复。文件以后,实施

17、介质恢用户可以在一个数据库、表空间或数据文件上实施完全恢复。如果用户在整个数据库上实施完全恢复,无论使用那么 RMAN 或 SQL*Plus,用户都必须:zzzz装载数据库保证欲恢复的所有数据文件都联机重建用户欲恢复的整个数据库和文件的备份应用联机或归档重做日志,或二者的组合如果用户在一个表空间或数据文件上实施完全恢复。那么必须:zzz如果数据库打开那么使欲恢复的表空间或数据文件脱机重建欲恢复的数据文件的备份应用联机或归档重做日志或二者的组合二、全恢复全恢复使用备份来产生数据库的非当前版本。换句话说用户不需要使用在最近备份后生成的所有重做。用户通常在下列情况下实施全数据库的全恢复:zzzz介质

18、故障损坏了部分或所有联机重做日志导致数据丢失的用户错误,例如用户不删除了一个表由于丢失了归档重做日志,因此用户不能实施完全恢复用户丢失了当前文件,必须使用备份的文件来打开数据库要进行全介质恢复,用户必须重建所有数据文件(用恢复前创建的备份)。然后在恢复完成后以 RESETLOGS 选项打开数据库。RESETLOGS 操作创建数据库的新替身。也就是说,一个从日志序列号 1 开始的,拥有新的日志系列号流的数据库。1、表空间及时点恢复表空间及时点恢复(TSPITR)特征使用户能够把一个或多个表空间恢复到一个不同于数据库其余部分的及时点。TSPITR 在用户要进行下列操作时最有用:zzzz从错误的删除

19、或清空表操作(truncate)中恢复恢复逻辑损坏的表从只影响数据库子集的不正确的批处理作业或其它 DML 语句中恢复当多个模式存在于一个物理数据库的一个单独的表空间中,其中一个点的逻辑模式不同于物理数据库的剩余部分从一个很大数据库(VLDB)中恢复表空间,而不是重备份重建整个数据库,然后执行一个完全的数据库前卷z2、介质恢复选项535因为用户没有把数据库完全恢复到最当前的时间,所以用户必须告诉 Oracle 什么时候结束恢复,可以实施下列类型的介质恢复:Ø 基于时间的恢复:把数据恢复为指定时间点;Ø 基于取消的恢复:恢复直到发出 CANCEL 语句(在使用 Recover

20、y Manager 时不能使用)为止;Ø 基于变化的恢复:恢复直到指定 SCN;Ø 日志序列恢复:恢复直到指定的日志系列号(只在使用 Recovery Manager 时可用) 为止。12.2.4 RMAN 和用户管理的重建和恢复有两个恢复物理文件的基本方法:Ø 使用 RMAN 重建和恢复数据库;Ø 使用系统程序重建备份,然后通过执行 SQL*Plus 的 RECOVER 命令来恢复。不管使用哪种方法,用户都能恢复数据库、表空间和数据文件。在实施介质恢复之前,要恢复哪个数据文件。通常用户可以使用固定视图 V$RECOVER_FILE。这个视图需要列出需要

21、恢复的所有文件。一、用 RMAN 重建和恢复基本的 RMAN 恢复命令是 restore 和 recover 。使用 RESTORE 从备份集或磁盘上的映像拷贝重建数据文件,把它们中放置在它们的当前位置或一个新位置。也可以重建包含归档重做日志的备份集。使用 RMAN recover 命令来实施介质恢复,并应用归档日志或增量备份。RMAN 自动进行备份和拷贝的恢复和重建。例如在 RMAN 下执行下面数据库到它的当前时间:SHUTDOWN IMMEDIATE; # shuts down database STARTUP MOUNT; # starts and mounts database RES

22、TORE DATABASE; # restores all datafilesRECOVER DATABASE; # recovers database using all available redoALTER DATABASE OPEN; # reopens the database令,重建和恢复二、用户管理的重建和恢复如果不使用 RMAN,可以使用系统程序重建备份,然后通过执行 SQL*Plus 的RECOVER 命令来恢复那么数据库,基本步骤如下:1. 在确定哪个文件损坏后,使数据库处于重建和恢复的适当状态。例如只是一部分数据文件被破坏了,那么在数据库打开时使受影响的表空间脱机。2.

23、使用操作系统程序重建备份。如果没有备份,但是有需要的重做日志,它能够测定数据文件第一次创建的时间,以及包含损坏的文件名的以执行恢复的。文件,在这种情况下,有时候是可如果不能把数据文件重建到它的初始位置,也可以重新放置重建文件并改变在文件536中的位置。3. 重建需要的任何归档重做日志文件 Restore any necessary archived redo log files.4. 执行 SQL*Plus 的 RECOVER 命令来恢复那么数据文件备份例如,假设由于介质故障,丢失了包含在 users 表空间的/oracle/dbs/users1.dbf 数据文件。另外在单独的磁盘驱动器上有一

24、个叫/dsk2/backup/users1.dbf 的备份。当数据文件丢失(通过返回一个错误告诉这个文件丢失)时,第一步就是使 users 表空间脱机,输入如下:SQL> ALTER TABLESPACE users OFFLINE TEMPORARY;然后通过操作系统命令重建 users1.dbf 的备份,输入如下:% cp /dsk2/backup/users1.dbf /oracle/dbs/users1.dbf假设有所有需要的归档重做日志,可以使用以下命令重建数据文件:SQL> RECOVER AUTOMATIC DATAFILE '/oracle/dbs/user

25、s1.dbf'最后使表空间联机如下:SQL> ALTER TABLESPACE users ONLINE;12.3 重建和恢复策略Oracle 提供了很多过程和工具来帮助用户进行恢复操作,建立有效的恢复策略应进行下列步骤:Ø 测试备份和恢复策略Ø 使用 RMAN 确认备份和恢复Ø 计划对介质故障的响应Ø 计划对数据文件块故障的响应Ø 计划对非介质故障的响应12.3.1 测试备份和恢复策略在迁移到一个生产系统之前或之后,应该在一个测试环境中练习备份和恢复技巧。这样做可以详细测试策略,并减少发生在实际环境中的问题。定期地进试恢复能保证

26、用户的归档、备份和恢复过程能正常工作。它也有助于用户熟悉恢复过程,从而使用户在中少犯错误。如果用户使用 Recovery Manager, 就使用 DUPLICATE 命令用生产数据库的备份创建一个测试数据库。如果执行用户管理的备份和恢复,可以使用操作系统和 SQL*Plus 命令的结合来建立一个新的数据库(一个的数据库),或一个已存在的数据库的拷贝。当测试备份和恢复策略时,问下面的问题:Ø 若磁盘故障损坏了完全恢复?单独测试数据文件、数据库的一些文件,是否可以在这个磁盘上实施这些文件的文件和联机重做日志的丢失。Ø 如果用户偶然删除了一个表,如何恢复?测试涉及空间及时点恢复

27、的情况,使用 Import 命令。全恢复的全数据库恢复、表Ø 如果 alert_SID.log 显示一个或多个表包含错误的数据,怎么办?使用 RMANBLOCKRECOVER 命令测试数据块恢复。也可以使用 SQL*Plus 的 RECOVER . TEST 命令537查找恢复的故障。Ø 如果整个数据中心被火灾破坏,是否可以进行恢复?假设你只有包含备份的归档磁带,如何恢复数据库?12.3.2 使用 RMAN 确认备份和恢复如果使用 RMAN,可以使用带 VALIDATE 关键字的 BACKUP 和 RESTORE 命令。BACKUP VALIDATE 测试是否可以执行一个有

28、效的数据库文件的备份。RESTORE VALIDATE 测试是否可以重建一个 RMAN 备份。注意,这些命令不能产生任何实际的输出文件。12.3.3 计划对介质故障的响应介质故障是对数据的最大威胁。介质故障是一种物理问题,它发生在计算机不能执行读或写操作数据库所必需的文件。常见的介质故障问题包括:l 保存数据库文件的磁盘驱动器的磁头损坏地l 数据文件、联机或归档重做日志或文件偶然被删除、重写或损坏用于从数据库文件的介质故障中恢复的技术很大程度上取决于所发生的介质故障的类型。例如用于恢复损坏的数据文件的策略不同于恢复丢失介质恢复的基本步骤是:文件的策略。zzz决定欲恢复的文件决定所需的介质恢复的

29、类型:完全或全,打开的数据库或关闭的数据库重建所需文件的备份或拷贝:数据文件、日志文件和恢复数据文件所需的归档重做zz应用重做日志(和/或者增量备份,当使用 Recovery Manager 时) 恢复数据文件重新打开数据库,如果用户实施RESETLOGS 方式打开数据库全恢复或重建文件备份,那么用户必须以如果执行数据文件的介质恢复,可以选择完全或全恢复。使用的恢复方法的类型根据情况的不同而不同。表 12-1 列出了各种情况和策略。表 12-1 典型的介质故障和恢复策略丢失/不能的文件归档模式状态策略一个或多个数据文件NOARCHIVELOG关闭从一致数据库备份中重建整个数据库。备份后所有的修

30、改都丢失。带RESETLOGS选项打开数据库。注意:在重建了NOARCHIVELOG备份后,用户不带RESETLOGS选项打开数据库的唯一时间是没有重写最新备份活动的联机日志文件时一个或多个数据文件和一个联机重复日志NOARCHIVELOG关闭从一致备份中重建数据库。用户将丢失最新备份后所作的改变。带RESETLOGS选项打开数据库。注意:如果没有备份,那么只要用户拥有必需的重做日志和包含损坏文件名字的 文件,仍然能实施恢复。如果不能在文件的初始位置重建该文件,那么必须重新 重建的文件,然后在 文件中重命名该文件。538续表 12-1 典型的介质故障和恢复策略12.3.4计划对数据文件块故障的

31、响应如果数据文件内选择的数据块损坏,将不可以重建和恢复整个数据文件。然而,可以执行块介质恢复。Recovery Manager 的 BLOCKRECOVER 命令可以重建和恢复指定数据块,当数据库是打开的而且损坏的数据文件联机。12.3.5计划对非介质故障的响应虽然在制定恢复策略时介质恢复是主要的考虑,但是用户应该理解非介质故障的基本类型及其和解决方案。一、语句故障语句故障是处理 Oracle 程序中语句时的逻辑故障。Oracle 数据库服务器或操作系统通常在语句故障发生时返回错误码和错误信息。二、用户错误用户错误是用户在数据库中加入数据或删除数据时所犯的错误。如果用户拥有丢失数据的表的逻辑备

32、份,那么有时候用户能简单地把它输入回表。丢失/不能的文件归档模式状态策略一个或多个数据文件和所有文件NOARCHIVELOG关闭从一致备份中重建整个数据库和文件。用户将丢失自最新备份以后所作的所有改变。带RESETLOGS选项打开数据库。一个或多个数据文件(但不是全部)ARCHIVELOG打开在数据库打开时,实施表空间或数据文件恢复。设置表空间或数据文件脱机,从备份中重建、恢复并重新联机。没有丢失任何改变。在恢复过程中数据库始终保持可用所有数据文件ARCHIVELOG关闭重建备份的数据文件,装配 文件,完全恢复数据库。假设所有的重做日志可用,可以正常打开数据库(不用执行RESETLOGS)。一

33、个或多个联机日志成员ARCHIVELOG关闭执行数据库的全恢复到丢失的联机重做日志的及时点。带RESETLOGS选项打开数据库。一个或多个数据文件和需要恢复的一个归档重做日志ARCHIVELOG打开在包含丢失数据文件的表空间上实施 TSPITR,恢复到可用的最近重做日志的及时点所有文件,可能一个或多个数据文件ARCHIVELOG不打开从备份重建丢失的 文件和数据文件文件,恢复数据文件。没有丢失修改。但在恢复期间数据库不可用。带RESETLOGS选项打开数据库。所有 文件,可能一个或多个数据文件,以及恢复所需的归档或联机重做日志ARCHIVELOG不打开从备份重建需要的文件,执行数据库的 全恢复

34、到最近可用日志的及时点。将丢失包含在丢失日志和随后日志中的所有修改。带RESETLOGS选项打开数据库。539根据情况的不同,用户可以实施某些种类的全恢复来纠正用户错误。用户可以实施数据库及时间点恢复(DBPITR)或表空间时间点恢复(TSDPITR)。表 12-2 解释这些恢复之间的区别。全表 12-2 DBPITR 与 TSDPITR 区别三、实例故障实例故障发生在一个实例异常终止的时候。发生实例故障的:zzzzz断电导致服务器由于硬件问题服务器变得不可用操作系统一个 Oracle进程失败用户发出 SHUTDOWN ABORT 语句幸运的是,Oracle 自动实施实例恢复:用户所需的只是重

35、新启动数据库。Oracle 自动检测数据库没有干净关闭的,然后把在重做日志中的已提交和未提交的重做应用到数据文件中并回滚未提交数据。最后 Oracle 使数据文件和文件同步,并打开数据库。12.4 用户管理的介质恢复有两个恢复物理文件的基本方法:Ø 使用 RMAN 重建和恢复数据库;系统程序重建备份,然后通过执行 SQL*Plus 的 RECOVER 命令来恢Ø 使用复。不管使用哪种方法,用户都能恢复数据库、表空间和数据文件。对于用户管理的介质恢复,在实施介质恢复之前,需要到需要的位置。要恢复哪个数据文件,然后采用手工的方式将备份拷贝这节介绍如何实现用户管理的介质恢复,内容

36、包括:Ø 确定要恢复的文件Ø 重建文件Ø 了解基本的介质恢复过程Ø 完全介质恢复种 类描述DBPITR1. 重建整个数据库备份2. 恢复数据库到错误发生前3. 打开 RESETLOGSTSPITR1. 使用 RMAN 或用户管理的方法建立辅助实例.2. 把辅助实例上的表空间恢复到错误发生前的时间3. 把数据回主数据库540全介质恢复¾Ø 打开介质恢复后的数据库12.4.1确定要恢复的文件在介质恢复前必须首先确定要恢复的文件。可以用 V$RECOVER_FILE 视图来确定哪些文件要恢复。它可以列出所有需要恢复的文件以及要恢复它们的。下

37、面的时的时间:会显示要恢复的数据文件的 ID 号及其可能的恢复,SCN 以及恢复开始SELECT * FROM V$RECOVER_FILE;FILE#ONLINEERRORCHANGE#TIME14 ONLINE15 ONLINE000FILE NOT FOUND21 OFFLINE OFFLINE NORMALV$DATAFILE 和 V$TABLESPACE 视图,以获得需要恢复的数据文件的文件名和表空间名。例如输入:SELECT d.NAME, t.NAME AS tablespace_name FROM V$DATAFILE d, V$TABLESPACE tWHERE t.TS#

38、= d.TS#AND d.FILE# IN (14,15,21);# use values obtained from V$RECOVER_FILE queryNAMETABLESPACE_NAME/oracle/dbs/tbs_14.f/oracle/dbs/tbs_15.f/oracle/dbs/tbs_21.f 你也可以用 SQL*Plus COL df# FORMAT 999COL df_name FORMAT a20 COL tbsp_name FORMAT a10 COL status FORMAT a7COL error FORMAT a10TBS_1 TBS_2TBS_3进行,

39、如下所示:SELECT r.FILE# AS df#, d.NAME AS df_name, t.NAME AS tbsp_name,d.STATUS, r.ERROR, r.CHANGE#, r.TIME注意:如果当前使用的 文件是用备份恢复的或是故障发生后新建的,上面的 显示是不能用的。一个恢复的或是新建的 文件不包含 Oracle 所需的正确填写V$RECOVER_FILE 的信息。541FROM V$RECOVER_FILE r, V$DATAFILE d, V$TABLESPACE t WHERE t.TS# = d.TS#AND d.FILE# = r.FILE#/输出如下:DF#

40、 DF_NAMETBSP_NAMESTATUS ERRORCHANGE# TIME14 /oracle/dbs/tbs_14.f TBS_1OFFLINE OFFLINENORMAL015 /oracle/dbs/tbs_15.f TBS_2OFFLINE OFFLINENORMAL021 /oracle/dbs/tbs_21.f TBS_3OFFLINE OFFLINENORMAL0除了要确定恢复哪些文件,你还要知道哪些文件是不能恢复的。下面的内容与介质恢复有着特别的。一、不可恢复的表和索引可以用 CREATE TABLE AS SELECT 语句来创建表和索引,也可以指定 Oracle 将

41、表和索引创建为不可恢复的。如果表或索引被创建为不可恢复的,Oracle生成操作的重做日志。因而即使工作在 ARCHIVELOG 方式下,你也不能够恢复创建为不可恢复的数据对象。应该明白当进行介质恢复操作时,那些不可恢复的数据对象将被 RECOVER 操作逻辑上标记为被破坏的。任何对不可恢复的数据对象的 都将产生 ORA-01578 错误信息。如果需要应该删除不可恢复的数据对象,重新创建它们。当然在一种可能下,表是不可恢复的,而基于它建立的索引是可恢复的,那么当进行介质恢复时,这个索引被标记为坏的,然而表是不可恢复的(它将在恢复操作时被标记为坏) 。所以这个索引指向了坏的数据块,也就是说必须丢弃

42、这个索引,在必要时应该重新创建表和索引。二、只读表空间使用 USING BACKUP CONTROLFILE 选项的介质恢复操作要检查只读文件,只读文件不能恢复。要避免这个错误,在用备份文件进行恢复操作前,应将数据文件从只读表空间中取出。要使用读状态,那么文件的正确版本进行恢复操作。如果在完成恢复工作后表空间将是只文件应该是在表空间在只读状态时生成的。与此相似,如果恢复完成后,表空间是读写方式的,那么它在文件中也应该是读写方式的。如果合适的文件不可用,就需要执行 CREATE CONTROLFILE 语句建立新文件)。如果你要为带有只读表空间的数据库重新创建文件,发出如下命令以得到你需要按注意

43、:如果不能承受不可恢复的表或索引的丢失,那就应该在创建了不可恢复的表或索引后对它们进行备份。542照执行的操作过程:ALTER DATABASE BACKUP CONTROLFILE TO TRACE;除非你在数据库打开后将表空间联机,否则上面的过程应与处理程相似。的正常表空间的过12.4.2重建文件如果认为有必要进行介质恢复,就要重建恢复工作所必须的文件。包括执行下列任务:Ø 重建备份的数据文件Ø 备份无效时重新创建数据文件Ø 重建必要的归档重做日志文件一、重建备份的数据文件如果介质的故障造成一些数据文件的损坏,那么在恢复已损坏的文件前必须用备份重建已损坏的文件

44、。如果不能在原处重建已损坏的文件(例如由于更换了磁盘,你要在替换的磁盘上重建文件) ,那么在相关数据库的文件中必须说明这些文件的新位置。在缺省位置重建备份数据文件的步骤:l 使用 12.4.1 方法确定要恢复的文件l 如果数据库是打开的,使包含不可ALTER TABLESPACE users OFFLINE IMMEDIATE;的数据文件的表空间脱机,例如输入:l 用操作系统令把数据文件的备份拷贝到它的缺省位置,例如要在 UNIX 系统中重建 csi_14.f 文件,可以发出如下命令:% cp /disk2/backup/csi_14.bak /disk1/oracle/dbs/csi_14.

45、fl 恢复受影响的表空间,例如输入:RECOVER TABLESPACE usersl 使恢复的表空间脱机,例如输入:ALTER TABLESPACE users ONLINE;二、备份无效时重新创建数据文件如果数据文件损坏,且没有可用的备份文件。这时仍然可以恢复数据文件前提是:l 所有自创建数据库以来的归档重做日志文件均为可用;z文件中包含损坏的数据文件的文件名(也就是说数据文件加入数据库后生成的备份)。文件是最近的或是在损坏的在进行恢复时重新创建数据文件的步骤是:l 在没有相应的备份文件时,创建一个新的空的数据文件以替换损坏的数据文件。例如假设数据文件 disk1 users1 损坏且没有

46、可用备份文件,下面的语句将在 disk2 上重新创建最初的数据文件(大小相同):ALTER DATABASE CREATE DATAFILE 'disk1 users1' AS 'disk2 users1'这一语句将创建一个与丢失文件相匹配的空文件,Oracle 会在得文件大小的信息。文件和数据字典中获543旧的数据文件被更名为新的数据文件。l 基于空文件进行介质恢复,例如键入如下命令:RECOVER DATAFILE 'disk2 users1'l 在恢复期间,必须装入自创建数据库以来用到丢失的数据文件的这个新的空的版本中的所有归档重做日志文件

47、,并重新应三、重建丢失的文件如果介质故障已经影响了数据库的文件,不管文件是否是多工的数据库继续运行,直至 Oracle 的进程第一次需要文件,此时数据库和实例自动关闭。如果介质故障是暂时的且数据库没有关闭,那么立即修正故障可避免数据库的自动关闭。但是如果在修正暂时介质故障之前,关闭了数据库,那么用户可以在找到问题并恢复对文件的以后重新启动数据库。对于破坏对数据库的文件的介质故障,合适的恢复过程取决于用户是否多工文件(镜像Ø 丢失多工文件)。下面的内容将介绍合适的恢复过程:文件的一个成员Ø 当备份可用时,丢失多工文件的所有成员Ø 丢失当前1. 丢失多工文件的所有拷贝

48、文件的一个成员如果介质故障破坏了数据库的一个或多个文件,且至少有一个文件没有被介质故障所破坏(如果多工文件配置的所有文件都已经被破坏,就按照丢失当前控制文件的所有拷贝介绍的步骤进行操作),则使用下列步骤来恢复数据库:(1)重建文件到其缺省位置l 如果实例仍然运行就该实例,使用 SHUTDOWN ABORTl 修正导致介质故障的硬件问题。% cp /oracle/good_cf.f /oracle/dbs/bad_cf.fl 启动实例并打开数据库:STARTUP(2)重建文件到非缺省位置l 如果实例仍然运行就SHUTDOWN ABORT该实例l 如果不能迅速修复硬件问题,把数据库的当前文件的完整

49、无缺的多工拷贝到其它地方。例如要把 good_cf.f 更名为 new_cf.f ,用户可以输入:% cp /oracle/dbs/good_cf.f /oracle/dbs/new_cf.fl 编辑数据库的参数文件,使 CONTROL_FILES 参数反映所有文件的当前位置,并把没有重建的所有文件排除在外。例如要加入 new_cf.f ,可以输入:CONTROL_FILES='/oracle/dbs/good_cf.f' , ' /oracle/dbs/new_cf.f'l 启动实例并打开数据库:注意:不能用带有 CREATE DATAFILE 子句的 ALT

50、ER DATABASE 语句为 SYSTEM 表空间重新创建数据文件,因为所须的重做日志不可用。544STARTUP2. 当备份可用时,丢失多工文件的所有成员如果过程。当介质故障破坏了数据库的所有文件,但有一个文件备份时使用下面的文件不可用时,启动实例,但不要装配数据库。当文件不可用时,如果企图装配数据库,会出现错误信息:ORA-00205: error in identifying controlfile, check alert log for more info用户不能装配和打开数据库直到RESETLOGS 选项打开数据库。文件可以被。如果重建文件备份,必须以如下表,文件的重建过程取决于

51、联机重做日志是否可用。表 12-3文件丢失时的情形(1)重建备份的文件到其缺省位置zzz该实例,使用 SHUTDOWN ABORT如果实例仍然运行就修正导致介质故障的硬件问题。重建备份文件到初始化参数 CONTROL_FILES 指定的位置。例如, 如果/dsk1/oracle/dbs/cf1.f 和 /dsk2/cf2.f 是服务器参数文件列出的文件的位置,使用操作系统命令重建备份文件到这些位置:% cp /backup/cf.bak /dsk1/oracle/dbs/cf1.f% cp /backup/cf.bak /dsk2/cf2.fl 启动实例并装配数据库:STARTUP MOUNT

52、l 执行 USING BACKUP CONTROLFILE 子句的 RECOVER 命令开始恢复。如果执行全恢复,指定 UNTIL CANCEL 参数,例如输入:RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCELl 应用提示的归档日志。如果收到另一个提示信息说需要的归档日志丢失,可能意味着需要的重做日志上。在联机重做日志上。当实例发生时,未归档的修改位于联机例如,假设收到下面的信息:ORA-00279: change 55636 generated at 06/08/2000 16:59:47 needed for thread 1 O

53、RA-00289: suggestion : /oracle/work/arc_dest/arcr_1_112.arcORA-00280: change 55636 for thread 1 is in sequence #111联机日志的状态数据文件的状态响应可用当前如果联机日志包含恢复需要的重做,在恢复中应用日志重建 文件的备份。因此要指定包含修改的联机日志名以便打开数据库,恢复后带 RESETLOGS打开数据库不可用当前如果联机日志包含恢复需要的重做,必须重建文件。因为日志不可, 带 RESETLOGS打开数据库可用备份重建文件,执行完全恢复,带 RESETLOGS打开数据库不可用备份重

54、建文件的备份,执行全恢复,带 RESETLOGS打开数据库545Specify log: <RET>=suggested | filename | AUTO | CANCEL可以指定一个联机重做日志的名,按下 Enter:/oracle/dbs/t1_log1.f Log applied.Media recovery complete.如果由于某些,联机日志不能,可以不用联机日志而取消恢复。注意,如果所有的数据文件是当前的,需要恢复的重做在联机日志上,那么你将不能打开数据库,除非你应用了联机日志。如果联机日志不能l 带 RESETLOGS 选项打开数据库ALTER DATABASE

55、 OPEN RESETLOGS;l 立即备份数据库作为防范措施。(2)重建备份的文件到非缺省位置,必须重新创建文件。如果不能重建文件到它的初始位置,因为介质破坏太严重,必须在服务器参数文件中指定新的文件的位置。一个有效的文件应该在 CONTROL_FILES 参数指定的任何地方都可用。如果不的话,那么 Oracle 使不能装配数据库。重建备份的文件到非缺省位置的步骤:和前面的步骤一样,除了在第二步后增加了下面的步骤:编辑初始化参数 CONTROL_FILES 指定的位置以反映新的文件的位置。例如,如果在服务器参数文件中列出的文件的位置如下:CONTROL_FILES = '/dsk1/oracle/dbs/cf1.f', '/dsk2/cf2.f'修改初始化参数为:CONTROL_FILES = '/dsk3/tmp/cf1.f', 'dsk3/tmp/cf2.f'3. 丢失当前文件的所有拷贝如果数据库的所有文件都已经丢失,或被介质故障所破坏,但所有联机重做日志文件保持完

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论