天天看点

Oracle® 数据库备份恢复基础--6执行完全的数据库的还原和恢复

执行完全的数据库的还原和恢复

本章介绍工具RMAN从备份中恢复数据库。它包括以下主题:

用RMAN进行数据库还原和恢复:概述

基本数据库还原和恢复方案

准备和规划数据库还原和恢复

RMAN恢复:从备份中恢复丢失的数据库文件

 6.1用RMAN进行数据库还原和恢复:概述

本章的重点是当一个或多个数据库文件丢失时如何使用RMAN以及RMAN创建的备份来将你的数据库恢复返回到的正常运行的状态。RMAN所备份并且可以恢复的数据库文件有控制文件,服务器参数文件,数据文件和归档重做日志文件。

本章安排如下:

“基本的数据库还原和恢复方案”,完整介绍一些常见的数据库还原和恢复方案。如果这些方案符合您的情况,那么您可以按照这里列出的程序提纲进行处理。即使你的情境与这些情景不完全匹配,研究这些情景,可以帮助你创建自己的恢复进程的规划。

“准备和规划数据库还原和恢复”提供了一个通用的提纲可以用于规划还原和恢复操作,包括如何确定哪些文件需要还原和恢复,需要在恢复过程中采取什么步骤。它还介绍了如何检查RMAN还原操作过程中将使用的备份,如何验证还原操作要使用的备份是有效的。

“RMAN恢复:从备份中恢复丢失的数据库文件”提出许多分离的恢复过程,如如何恢复控制文件,一个SPFILE,个别的数据文件和重做日志,除了恢复特定类型文件的情况下的要求外,如果你是从一个备份控制文件恢复,这些步骤你必须考虑。如果您确切的还原和恢复方案不是这里列出的基本情况之一时,可以按照这里列出来过程提纲执行恢复计划中的独特的任务。

在数据库恢复使用的两个最重要的RMAN命令是:

RESTORE(还原),从基于RMAN存储库中的内容的RMAN备份中找回文件

RECOVER(恢复),利用现有的数据文件和重做日志执行完整或基于时间点的介质恢复。

通常情况下,您将设置适当的数据库状态进行数据恢复操作,分配或配置所需的磁盘和介质管理器通讯的通道,然后运行一系列的RESTORE和RECOVER命令。 RMAN从备份中找回所需的所有文件并在还原的数据文件上执行介质恢复,回到数据库所期望的状态。

6.1.1范围和本章的限制

本章介绍的技术将涵盖最常见的还原和恢复方案。执行还原和恢复,即使在复杂的场景,这里没有涉及的任何人都应该熟悉本章概述了技术。但是请注意,本文的讨论范围以下限制:

本章的大部分将集中在还原和恢复介质故障已损坏部分或全部数据库文件的情境,你的目标是从备份中还原损坏的文件,并恢复所有在重做日志数据库的变化将你的整个数据库返回到正常运行的状态。而一些更高级别类型的恢复,如整个数据库基于时间点恢复或单个表空间从用户错误中恢复,会顺便提到,而在第7章,“执行闪回和数据库的时间点恢复”讨论这些技术细节。

另见:

第7章,“执行闪回数据库的时间点恢复”数据库的时间点恢复(DBPITR)和闪回数据库的详细信息

Oracle数据库备份和恢复高级用户指南中的表空间时间点恢复(TSPITR)

虽然有可能会通过使用RMAN恢复目录,使用RMAN改变恢复目录的变化,如何在Oracle数据库备份和恢复高级用户指南“所涵盖的细节。

在本章的讨论将被限制在一个单一的实例配置上运行的Oracle数据库。虽然RMAN在真正应用集群和Data Guard配置中的数据库中可以执行还原和恢复,这样的场景超出了本手册的范围。在复习备份和恢复的基础知识之后,请参阅Oracle数据库Oracle集群件和Oracle真正应用集群管理和部署指南和Oracle Data Guard概念和管理使用RMAN在这些方面的更多信息。

6.1.2使用企业管理器(EM)进行还原和恢复

企业管理器(EM)提供了访问数据库还原和恢复功能,通过RMAN提供的一套恢复向导,使得DBA通过各种基于您的数据库的分析,可用的备份和数据恢复目标的恢复过程。

通过企业管理器使用RMAN,你可以进行简单的还原和恢复方案,本章概述,以及更为复杂的还原和恢复技术,如在时间点恢复,甚至使用了Oracle数据库的闪回功能,这能够有效修复介质故障和用户错误。

虽然基本功能是相同的,但命令行客户端提供了更大的灵活性,在许多常见的情况下,使用企业管理器界面的RMAN的还原和恢复功能会比直接使用RMAN命令行客户端更简单。

关于企业管理器的还原和恢复功能的更多细节,请参阅Oracle数据库两日DBA。

6.2基本数据库还原和恢复方案

你可以根据 “准备和规划数据库还原和恢复”中过程提纲以及在 “RMAN RESTORE:从备份中还原丢失的数据库文件”中的特定任务的过程中规划一种从大多数数据丢失中进行恢复的策略。然而,一些最常见的还原和恢复数据库场景在下面全面介绍:
。还原和恢复整个数据库:场景
。还原和完全恢复单个表空间或数据文件:场景
这里列出的过程提纲将整个数据库或单个表空间还原到其原始位置。
要使用本节中的过程,必须符合下列要求:
当前控制文件必须是完整未损坏的。
你必须拥有一套完整的归档日志和增量备份用于可用的数据文件备份的介质恢复。
对于任何您有没有备份的数据文件,你必须有一整套可追溯到该数据文件创建的时候的在线和归档重做日志。 (有了一套完整的重做日志,RMAN可以重新创建一个空的数据文件(此文件是没有备份的),然后重新应用所有此文件创建以来的变化,这个过程作为恢复过程的一部分。)

如果配置了自动通道,那么RMAN根据可用的设备类型各自对应的设置分配所有通道。否则,您必须将您的RESTORE 和 RECOVER命令放在RUN块中,并在开始部分由人工分配适当的DISK或sbt通道。否则,你的RESTORE命令将试图从该设备找回备份时会失败。

6.2.1还原和恢复整个数据库:场景

在这种场景下,你有一个当前的控制文件和SPFILE,但所有的数据文件被损坏或丢失。您必须还原和恢复整个数据库。
在这个例子中的数据库中有一个只读表空间,history,必须从备份中恢复,但并不需要介质恢复。

要恢复和恢复数据库是当前控制文件时:

1.在连接到目标数据库,确保数据库的已经MOUNT上。

RMAN> STARTUP MOUNT

2.使用SHOW  ALL命令,看看有什么通道被配置来访问备份设备。如果没有配置自动通道,那么人工分配一个或多个通道。

3.使用RESTORE DATABASE命令恢复数据库,并使用RECOVER DATABASE命令恢复它。

4.检查执行这些命令时的输出,看看是否恢复成功。如果是这样,打开数据库。

下面的这个例子使用自动通道执行还原和恢复数据库。

RMAN> RESTORE DATABASE;      
RMAN> RECOVER DATABASE DELETE ARCHIVELOG MAXSIZE 25M;      
这里所用的RECOVER DATABASE命令说明了两个有用的选项:

DELETE ARCHIVELOG模式使得RMAN在还原日志文件已应用于数据文件的还原之后会删除掉,以节省磁盘空间。

MAXSIZE 25M将还原日志文件占用的空间在任何特定的时刻限制在25MB。这给你更多的还原日志的磁盘空间使用情况的控制。请注意,如果一个单一的归档重做日志文件大于指定MAXSIZE值,你会得到一个错误。你将不得不再次尝试用一个更大的MAXSIZE值设置您的命令。

6.2.1.1恢复只读表空间与数据库

只读表空间可能需要特殊处理,在还原和恢复操作。默认情况下,还原操作会跳过只读表空间。在从备份中还原之后如果在只读表空间在SCN时成为只读后,当数据库的其余部分被恢复时,重做不会作用于此只读表空间。您可以强制RMAN通过使用带CHECK readonly选项的RESTORE命令还原任何丢失的属于只读表空间的数据文件:

RMAN> RESTORE DATABASE CHECK READONLY;      
RMAN> RECOVER DATABASE DELETE ARCHIVELOG;      
如果RMAN恢复完成时没有错误,你可以打开数据库:
RMAN> ALTER DATABASE OPEN;      

6.2.1.2在整个数据库还原和恢复中临时表空间的重建

在整个数据库还原和恢复之后,当打开数据库时,任何记录在RMAN信息库中的控制文件版本中所缺少临时表空间将按照它们以前创建时的大小以及AUTOEXTEND和MAXSIZE属性重建。

注意:

只有缺少的临时表空间会被被重建。如果临时文件在RMAN信息库中记录的位置仍然存在,但有一个无效的头,那么RMAN不重新创建该文件。

如果临时文件最初是作为Oracle管理文件创建的,那么在当前DB_CREATE_FILE_DEST的位置重建它们。否则,它们将在它们以前的位置重建。
如果由于一个I / O错误或其他一些原因RMAN无法重新创建此文件,那么错误将记录在警报日志中并且继续进行数据库的打开操作。

注意:
当使用恢复目录时,如果已经从备份中还原控制文件,恢复控制文件RMAN存储库中存储在恢复目录的RMAN信息库版本记录的临时表空间的信息更新。这将确保重新创建临时表的最新配置。
6.2.2恢复和完全恢复单个表空间或数据文件:情景
在这种情况下,该数据库是打开的,只有一些但并非所有的数据文件被损坏。你要还原和恢复损坏的表空间,而由于数据库是打开的,因此,数据库的其余部分仍然可用。
假设,使用 “确定哪些数据库文件需要还原或恢复” 中所描述的过程,以确定需要恢复的数据文件,你会发现表空间users中损坏的数据文件。

这个例子还原和恢复表空间,使用配置的通道并让RMAN选择来自磁盘或磁带用于还原表空间的备份和任何需要的增量备份和日志。

1.连接到目标数据库和恢复目录数据库(如果可用),并确保数据库已经装载(MOUNT)并且打开(OPEN)。例如:
2. 使用的ALTER TABLESPACE ...OFFLINE使受影响的表空间脱机如果它们没有脱机的话。
RMAN> SQL 'ALTER TABLESPACE users OFFLINE IMMEDIATE';      
3.用RESTORE命令还原表空间或数据文件,并用RECOVER命令恢复它。 (使用配置的通道,或如果需要的话,使用RUN块和分配通道来提高RESTORE和RECOVER命令的性能。)
RMAN> RESTORE TABLESPACE users;      
RMAN> RECOVER TABLESPACE users;      
4.如果RMAN在恢复过程中没有报告错误,那么将表空间联机:
RMAN> SQL 'ALTER TABLESPACE users ONLINE';      

到了这一步,整个过程是完整的。

6.3准备和规划数据库还原和恢复

尽管RMAN使得执行大多数数据库还原和恢复任务非常简单,你仍然不得不基于哪些数据库文件已丢失和恢复目标规划你的数据库还原和恢复行动。

RMAN可以为您作出还原过程中最重要的决定,但你可能想预演,甚至在某些情况下,覆盖其决定。例如,如果你知道一个给定的备份不可用,由于被异地存储的磁带或暂时无法访问的设备,你可以指示RMAN在恢复过程中不使用该备份。

RMAN提供工具,让你预览将用于还原的备份,并验证备份的内容,以确保它们能够用于即将的恢复操作中。

6.3.1数据库还原和恢复过程:提纲

使用RMAN进行还原和恢复的基本过程如下:

1.确定哪些数据库文件必须从备份中还原,哪些备份(哪些特定的磁带,或特定的备份集或在磁盘上存储副本)用于即将的还原操作。要还原的文件可能包括控制文件,SPFILE,归档重做日志文件,和数据文件。

2.按照您即将执行的恢复类型将数据库置于相应的适当的状态。例如,如果要恢复单个表空间或数据文件,那么你可以继续保持数据库处于打开状态并使要恢复的表空间或数据文件脱机。如果您准备恢复所有的数据文件,那么你必须先关闭数据库,再装载它,然后才能执行还原。

3.用RESTORE命令从备份中还原丢失的数据库文件。你可以将文件还原到其原始位置,或者您可能必须将它们还原到其他地点,例如,当原来位置的磁盘故障的时候。您可能还需要更新SPFILE,如果您已更改控制文件的位置,或如果您已更改数据文件或重做日志的位置导致改变控制文件的话。

4.如果需要的话,用RECOVER命令在还原的数据文件的基础上执行介质恢复。

5.执行使得数据库能够为用户再次提供服务的最后的步骤。例如,如果有必要重新打开数据库,如果当恢复时失去了控制文件,如果还原和恢复单个表空间时将脱机的表空间置于联机状态。

这个纲要的目的是包含了多种不同的场景。根据您的具体情况,所描述的一些步骤可能不适用。 (举例来说,如果从备份中还原的文件只有SPFILE的话,你并不需要进行介质恢复),你将不得不根据您的具体情况制定最终恢复规划。

6.3.2确定哪些数据库文件需要还原或恢复

确定哪些文件需要还原或恢复的方法取决于丢失的文件类型。本节包含以下主题:

6.3.2.1识别丢失的控制文件

你的数据库控制文件何时必须还原通常是显而易见的。如果有任何的控制文件的副本变得不可访问,数据库就会立即关闭,并且如果初始化参数文件CONTROL_FILES中指定的每个参数位置指定的控制文件都无效时,那么当您尝试启动数据库时,数据库管理程序会报告一个错误。

当控制文件的副本的一部分但并非所有的控制文件的副本发生损坏时,并不需要从备份中还原控制文件。当控制文件的一份副本丢失,数据库将自动关机。您可以复制一份完好无缺的控制文件副本覆盖原先损坏的控制文件副本,或更新参数文件使其不使用损坏或丢失的控制文件副本。一旦CONTROL_FILES参数仅引用目前完好的控制文件副本,您可以重新启动您的数据库。

请注意,如果你从备份中还原控制文件,你必须执行整个数据库的介质恢复,然后执行一个OPEN RESETLOGS操作,即使没有数据文件必须还原。

6.3.2.2识别数据文件需要介质恢复

何时和如何恢复取决于状态的数据库,其数据文件的位置。以确定哪些,如果有任何文件需要介质恢复,请执行下列过程:

1.启动SQL * Plus并连接到目标数据库。例如,执行以下命令连接​​到trgt:

% sqlplus 'SYS/[email protected] AS SYSDBA'      
2.通过执行下列SQL查询来确定数据库的状态:

SELECT STATUS FROM V$INSTANCE;      
如果状态是OPEN,那么数据库已经打开。然而,一些数据文件可能需要介质恢复。

3.查询V$DATAFILE_HEADER视图,以确定您的数据文件的状态。运行下面的SQL语句来检查数据文件头:

COL FILE# FORMAT 999      
COL STATUS FORMAT A7      
COL ERROR FORMAT A10      
COL TABLESPACE_NAME FORMAT A10      
COL NAME FORMAT A30      
SELECT FILE#, STATUS, ERROR, RECOVER, TABLESPACE_NAME, NAME       
FROM V$DATAFILE_HEADER       
WHERE RECOVER = 'YES' OR (RECOVER IS NULL AND ERROR IS NOT NULL);      
返回的每一行代表一个数据文件,或者需要介质恢复,或有错误需要还原。检查         RECOVER                 和ERROR列。         RECOVER                表示是否一个文件需要介质恢复,而ERROR表示读取和验证数据文件头是否有错误。

如果ERROR不是NULL,那么数据文件头不能被读取和验证。检查是否是一个暂时的硬件或操作系统问题导致的错误。如果不存在这样的问题,你必须还原文件或切换到它的一个副本。

如果错误列是NULL并且         RECOVER                栏是YES,那么该文件需要介质恢复(可能还需要从备份还原)。

注意:
由于V$DATAFILE_HEADER只读取每个数据文件头块,没有检测到的所有问题,需要恢复的数据文件。例如,你不能通过V$ DATAFILE_HEADER告诉一个数据文件是否包含损坏的数据块。
您还可以查询V$RECOVER_FILE通过具有自己的状态和错误信息的数据文件号列出需要恢复的数据文件。

      
SELECT FILE#, ERROR, ONLINE_STATUS, CHANGE#, TIME       
       FROM V$RECOVER_FILE;      
注意:
当从备份中还原了控制文件或在影响的数据文件的介质失败之后重新创建控制文件,此时你不能使用V$RECOVER_FILE。一个还原或重新创建的控制文件不包含需要精确更新V$RECOVER_FILE的信息。

      
为了找到数据文件和表空间的名字,你也可以使用数据文件号在V$DATAFILE和V$TABLESPACE视图间执行有用的连接。例如:

COL DF# FORMAT 999      
COL DF_NAME FORMAT A35      
COL TBSP_NAME FORMAT A7      
COL STATUS FORMAT A7      
COL ERROR FORMAT A10      
COL CHANGE# FORMAT 99999999      
SELECT r.FILE# AS df#, d.NAME AS df_name, t.NAME AS tbsp_name,       
       d.STATUS, r.ERROR, r.CHANGE#, r.TIME      
FROM V$RECOVER_FILE r, V$DATAFILE d, V$TABLESPACE t      
WHERE t.TS# = d.TS#      
AND d.FILE# = r.FILE#      
;      
ERROR列指出了每个需要恢复的文件的问题。

另见:
Oracle数据库参考中以V$开头的视图的相关信息
6.3.2.3只读表空间的恢复

在崩溃或实例恢复期间不需要对任何只读表空间进行恢复。在启动过程中,通过检查每个在线的只读数据文件是否是从在其变成只读之前进行的备份中还原的,恢复验证其需要介质恢复。

注意:
如果您从在只读表空间变成只读之前进行的备份中进行还原一个只读表空间,那么在执行进行介质恢复之前你不能访问此表空间。
6.3.3确定您的DBID

在要求SPFILE或控制文件从自动备份中恢复的情形下,例如你已经失去了所有数据库文件时的灾难恢复,您将需要使用您的数据库的DBID。按照“ARCHIVELOG及NOARCHIVELOG模式的选定”所建议的,你的数据库的DBID应连同数据库的其他有关基本信息一起记录。

如果没有数据库DBID的记录,有两个地方你可以找到它,而无需打开您的数据库。

1.DBID被用于形成控制文件自动备份的文件名。找到该文件,然后请参阅“配置控制文件自动备份格式”看在文件名中哪里出现DBID。

2.如果您有任何文本文件保存了RMAN会话的输出,当RMAN客户端启动并连接到你的数据库时会显示DBID,这时你所保存的文件中会出现DBID。典型的输出如下:

% rman TARGET /      
Recovery Manager: Release 10.2.0.1.0 - Production on Wed May 16 02:41:03 2012      
Copyright (c) 1982, 2005, Oracle.  All rights reserved.      
connected to target database: RDBMS (DBID=1285017406)      
RMAN>      
6.3.4在进行还原操作之前对备份进行预览:RESTORE PREVIEW
RESTORE命令支持PREVIEW选项,此选项在RMAN存储库中的信息的基础上用于确定一个给定的还原操作所需要的备份(在磁盘或流式介质,如磁带上的备份集或映像副本)。当规划还原和恢复操作时,使用         RESTORE                ...          PREVIEW                ,以确保所有需要的备份是可用的或指定您可能需要的情形来指示RMAN使用或避免特定的备份。

例如,         RESTORE                ...          PREVIEW                输出可能表明,在RESTORE操作时,RMAN会在即将进行的还原过程中要求使用来自磁带的备份,而此时你知道此磁带暂时无法使用。然后,您可以使用         CHANGE                ...          UNAVAILABLE                命令(在“标记备份可用或不可用”的描述)设置备份的状态为不可用。如果您然后再次运行         RESTORE                ...          PREVIEW                ,RMAN将给您显示那些将在执行还原操作时所要使用的备份,它将不使用不可用的备份。

在某些情况下,备份可能被列为可用,但事实上是远程磁带保存的,也就是说,在它能够用于还原操作之前,是远程存储和需要检索的。如果RMAN选择这样一种备份用于还原操作,操作将会出现错误并失败。         RESTORE                ...          PREVIEW                让您找出任何远程存储的备份,而         RESTORE                ...         PREVIEW              RECALL                则用于RESTORE操作所需的备份,但它存储在远程当使用时将从远程存储中召回。

6.3.4.1使用RESTORE ...PREVIEW

RESTORE ... PREVIEW可用于任何还原操作,RESTORE操作完成后创建一份每一个要求在RESTORE操作中要使用的备份的详细报告,此报告还包含用于恢复的必要目标SCN。下面是带PREVIEW选项RESTORE命令的几个例子:

RESTORE DATABASE PREVIEW;      
RESTORE TABLESPACE users PREVIEW;      
RESTORE DATAFILE 3 PREVIEW;      
RESTORE ARCHIVELOG FROM LOGSEQ 200 PREVIEW;      
RESTORE ARCHIVELOG FROM TIME 'SYSDATE-7' PREVIEW;      
RESTORE ARCHIVELOG FROM SCN 234546 PREVIEW;      
RESTORE                ...          PREVIEW                输出格式和LIST命令的输出格式是相同的。         RESTORE                ...          PREVIEW                输出的详细解释参见Oracle数据库备份和恢复参考
6.3.4.2使用RESTORE... PREVIEW SUMMARY

如果通过         RESTORE                ...          PREVIEW                提供的详细报告信息比所需的太多了,可以使用RESTORE... PREVIEW SUMMARY选项抑制大部分还原过程中所要使用和影响的特定文件的有关细节。下面是使用PREVIEW SUMMARY选项RESTORE的一些例子:
RESTORE DATABASE PREVIEW SUMMARY;      
RESTORE TABLESPACE users PREVIEW SUMMARY;      
RESTORE DATAFILE 3 PREVIEW SUMMARY;      
RESTORE ARCHIVELOG FROM SCN 234546 PREVIEW SUMMARY;      
RESTORE... PREVIEW SUMMARY报告的输出格式和LIST SUMMARY命令的输出格式是相同的。         RESTORE                ...          PREVIEW SUMMARY                输出的详细解释参见Oracle数据库备份和恢复参考

6.3.4.3使用RESTORE... PREVIEW RECALL

RESTORE... PREVIEW RECALL可用于任何还原操作,由于需要远程存储的备份的情况下,还原会失败。

下面的命令显示输出的情况下,其中的RESTORE... PREVIEW显示需要备份远程存储:

RMAN> restore archivelog all preview;      
Starting restore at 10-JUN-05      
using channel ORA_DISK_1      
using channel ORA_SBT_TAPE_1      
List of Backup Sets      
===================      
BS Key  Size       Device Type Elapsed Time Completion Time      
------- ---------- ----------- ------------ ---------------      
31      12.75M     SBT_TAPE    00:00:02     10-JUN-05           
        BP Key: 33   Status: AVAILABLE  Compressed: NO  Tag: TAG20050610T152755      
        Handle: 15gmknbs   Media: /v1,15gmknbs      
  List of Archived Logs in backup set 31      
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time      
  ---- ------- ---------- --------- ---------- ---------      
  1    1       221154     06-JUN-05 222548     06-JUN-05      
  1    2       222548     06-JUN-05 222554     06-JUN-05      
  1    3       222554     06-JUN-05 222591     06-JUN-05      
  1    4       222591     06-JUN-05 246629     07-JUN-05      
  1    5       246629     07-JUN-05 262451     10-JUN-05      
BS Key  Size       Device Type Elapsed Time Completion Time      
------- ---------- ----------- ------------ ---------------      
32      256.00K    SBT_TAPE    00:00:01     10-JUN-05           
        BP Key: 34   Status: AVAILABLE  Compressed: NO  Tag: TAG20050610T153105      
        Handle: 17gmknhp_1_1   Media: /v1,17gmknhp_1_1      
  List of Archived Logs in backup set 32      
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time      
  ---- ------- ---------- --------- ---------- ---------      
  1    6       262451     10-JUN-05 262547     10-JUN-05      
  1    7       262547     10-JUN-05 262565     10-JUN-05      
List of remote backup files      
============================      
        Handle: 15gmknbs   Media: /v1,15gmknbs      
在输出尾部的“List of remote backup files”标识远程存储的备份。在这种情况下,利用RESTOREARCHIVELOG ALL PREVIEW RECALL发起远程备份的召回并产生下列输出:

RMAN> restore archivelog all preview recall;      
Starting restore at 10-JUN-05      
using channel ORA_DISK_1      
using channel ORA_SBT_TAPE_1      
List of Backup Sets      
===================      
BS Key  Size       Device Type Elapsed Time Completion Time      
------- ---------- ----------- ------------ ---------------      
31      12.75M     SBT_TAPE    00:00:02     10-JUN-05           
        BP Key: 33   Status: AVAILABLE  Compressed: NO  Tag: TAG20050610T152755      
        Handle: 15gmknbs   Media: /v1,15gmknbs      
  List of Archived Logs in backup set 31      
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time      
  ---- ------- ---------- --------- ---------- ---------      
  1    1       221154     06-JUN-05 222548     06-JUN-05      
  1    2       222548     06-JUN-05 222554     06-JUN-05      
  1    3       222554     06-JUN-05 222591     06-JUN-05      
  1    4       222591     06-JUN-05 246629     07-JUN-05      
  1    5       246629     07-JUN-05 262451     10-JUN-05      
BS Key  Size       Device Type Elapsed Time Completion Time      
------- ---------- ----------- ------------ ---------------      
32      256.00K    SBT_TAPE    00:00:01     10-JUN-05           
        BP Key: 34   Status: AVAILABLE  Compressed: NO  Tag: TAG20050610T153105      
        Handle: 17gmknhp_1_1   Media: /v1,17gmknhp_1_1      
  List of Archived Logs in backup set 32      
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time      
  ---- ------- ---------- --------- ---------- ---------      
  1    6       262451     10-JUN-05 262547     10-JUN-05      
  1    7       262547     10-JUN-05 262565     10-JUN-05      
Initiated recall for the following list of remote backup files      
==========================================================      
        Handle: 15gmknbs   Media: /v1,15gmknbs      
Finished restore at 10-JUN-05      
你可以重复执行         RESTORE                ...          PREVIEW                命令,直到报告没有还原所需远程存储的备份。

可以追加RECALL到任何         RESTORE                ...          PREVIEW                命令,例如下面的这些例子:

RESTORE TABLESPACE users PREVIEW RECALL;      
RESTORE DATAFILE 3 PREVIEW RECALL;      
6.3.5验证备份还原:RESTORE VALIDATE 和 VALIDATE BACKUPSET

         RESTORE                 ...          VALIDATE                和         VALIDATE              BACKUPSET                命令测试是否可以从备份中恢复。您可以为任何所需的RESTORE操作测试可用备份的可用性,或测试RESTORE操作所使用的一个特定的备份的内容。备份的内容实际上被读取和验证看其是否讹误,以确保可以从它们要还原的对象能够还原。你有这些选项:

         RESTORE              ...              VALIDATE                验证测试是否RMAN可以从备份中还原一个特定对象。 RMAN选择将使用的备份。

VALIDATE BACKUPSET测试你指定备份集的有效性。

另见:
Oracle数据库备份与恢复参考关于RESTORE的语法

Oracle数据库备份和恢复参考关于VALIDATE的语法

6.3.5.1用RESTORE...VALIDATE验证备份的还原

您可以输入任何有效的RESTORE命令并指定VALIDATE子句来测试是否可用备份进行RESTORE操作是可用的。当用RESTORE...VALIDATE验证备份时,数据库可以处于装载或打开状态。

下面这个例子说明验证控制文件,SYSTEM表空间,和所有归档日志的备份的还原:

RESTORE CONTROLFILE VALIDATE;      
RESTORE TABLESPACE SYSTEM VALIDATE;      
RESTORE ARCHIVELOG ALL VALIDATE;      
RESTORE DATAFILE 4,5,6 VALIDATE;      
注意:
当验证数据文件的还原时没有必要将数据文件脱机,因为验证数据文件的备份只读取备份,不影响生产系统中的数据文件。      
如果在输出中你看到错误消息和下面的消息,那么RMAN不能从可用的备份还原一个或多个特定的文件:

RMAN-06026: some targets not found - aborting restore      
如果你看到一个类似于以下的例子的错误消息堆栈和输出,那么RMAN在读取指定的备份遇到了问题:

RMAN-03009: failure of restore command on c1 channel at 12-DEC-01 23:22:30      
ORA-19505: failed to identify file "oracle/dbs/1fafv9gl_1_1"      
ORA-27037: unable to obtain file status      
SVR4 Error: 2: No such file or directory      
Additional information: 3      
如果你没有看到一个错误堆栈,那么恭喜你RMAN测试指定的对象可从可用的备份中还原是成功的,应该能够在一个真实的还原和恢复操作过程中成功还原这些对象。

6.3.5.2用VALIDATE BACKUPSET验证备份集

         BACKUP              VALIDATE                命令要求你必须知道需要验证备份集的主键。

指定哪个备份集要验证:

通过运行list命令找到你要验证的备份集,并注意其列出的主键。例如:

LIST BACKUP;      
验证备份集还原,通过主键指定它们。这个例子验证备份集56和57的还原:

VALIDATE BACKUPSET 56,57;      
如果输出包含消息“         validation              complete                ”,然后RMAN成功验证指定的备份集恢复。例如:

using channel ORA_DISK_1      
channel ORA_DISK_1: starting validation of archive log backupset      
channel ORA_DISK_1: restored backup piece 1      
piece handle=/oracle/dbs/0mdg9v8l_1_1 tag=TAG20020208T155604 params=NULL      
channel ORA_DISK_1: validation complete      
6.4 RMAN RESTORE:从备份中还原丢失的数据库文件

本节讨论如何还原由RMAN备份的不同类型的数据库文件。一旦你有一个还原你的数据库丢失部分的总体规划,在这里可以找到如何执行你的规划中的独立任务的详细信息。

本节包含以下主题:

从备份中还原控制文件

从备份中还原服务器参数文件(SPFILE)

还原和恢复数据文件和表空间

从备份中还原归档重做日志

6.4.1从备份中还原控制文件

你所有的控制文件副本的丢失或损坏需要从备份中还原控制文件。 RESTORE CONTROLFILE命令用来还原控制文件。

注意:
从备份还原你的数据库的控制文件后,您必须按照“在数据库,表空间或数据文件还原之后执行介质恢复”所描述的执行数据库的完整介质恢复,然后用RESETLOGS选项打开数据库。唯一例外的是在“控制文件还原到新位置”描述的情况,此时你将控制文件还原到CONTROL_FILES初始化参数中未列出的位置中。在这种情况下,您将在指定的位置创建控制文件的副本而不触及正在运行的数据库。

      
RMAN可以还原控制文件到其默认的位置(在下面的章节中描述的规则来确定),或您选择一个或多个不同地点,使用         RESTORE CONTROLFILE... TO                 目的地选项。

6.4.1.1用于还原控制文件的默认位置

还原控制文件时,默认的位置是所有CONTROL_FILES初始化参数中定义的位置。如果你不设置CONTROL_FILES初始化参数,数据库使用当在CONTROL_FILES参数中未设置位置创建一个控制文件相同的规则,确定还原控制文件的位置。这些规则在Oracle数据库SQL参考中的CREATE CONTROLFILE语句中描述。

6.4.1.2从控制文件控制文件的自动备份还原

如果你不使用恢复目录,你必须从一个自动备份恢复控制文件。如果你想从自动备份中恢复控制文件,数据库必须是在NOMOUNT状态。首先,你必须设置你的数据库的DBID,然后使用自动备份的          RESTORE CONTROLFILE FROM AUTOBACKUP                命令:

RMAN> SET DBID 320066378;      
RMAN> RUN {      
    SET CONTROLFILE AUTOBACKUP FORMAT       
          FOR DEVICE TYPE DISK TO 'autobackup_format';      
    RESTORE CONTROLFILE FROM AUTOBACKUP;      
    }      
RMAN按照自动备份格式和DBID来查找控制文件的自动备份的位置。如果找到一个,RMAN从此备份还原控制文件到在CONTROL_FILES初始化参数中所列出所有控制文件的位置上。

有关如何确定autobackup_format正确的值的信息,请参阅Oracle数据库备份和恢复参考的条目CONFIGURE 中CONFIGURE CONTROLFILE AUTOBACKUP FORMAT的格式描述

如何确定您的DBID的详细信息,请参见“确定您的DBID”。

6.4.1.3使用闪回恢复区时控制文件的还原

无论你是否使用闪回恢复区,还原控制文件使用的命令是相同的。但是,如果您使用闪回恢复区,通过对控制文件中列出的所有基于磁盘的备份和映像副本以及未记录在此还原的控制文件中而登录在闪回恢复区中的任何备份执行隐式交叉检查,RMAN更新一个从备份中还原的控制文件。因此,还原的控制文件有在你的闪回恢复区中所有备份以及任何其他在备份期间控制文件所知道的备份的完整和准确的记录。这提高了此还原的控制文件在数据库的其余部分还原的有效性。

控制文件的恢复后,磁带备份不会自动交叉检验。如果您正在使用的磁带备份,然后还原控制文件和装载数据库后,你必须交叉检验磁带上的备份,如下列例子所示:

RMAN> CROSSCHECK BACKUP DEVICE TYPE SBT;      
6.4.1.4当使用恢复目录时还原控制文件

通过使用恢复目录比只使用存储在RMAN信息库中控制文件从自动备份中还原丢失的控制文件时更容易。恢复目录中包含一个备份的完整记录,包括控制文件的备份。因此,您不必指定DBID或控制文件自动备份格式。

要还原控制文件,连接RMAN到目标数据库和恢复目录,并把数据库置于NOMOUNT状态。然后发出不带参数的RESTORE CONTROLFILE命令,如下列例子所示:

% rman TARGET rman/rman CATALOG catdb/catdb      
RMAN> RESTORE CONTROLFILE;      
还原控制文件被写入CONTROL_FILES初始化参数中列出的所有位置。

在不同情况下使用的RESTORE CONTROLFILE有关限制的详细信息,请参阅Oracle数据库备份和恢复参考中关于RESTORE CONTROLFILE讨论。

6.4.1.5从已知位置还原控制文件

从已知的控制文件副本使用下列这种形式的命令,你可以还原控制文件:

RMAN> RESTORE CONTROLFILE from 'filename';      
在由filename指定的位置上找到的控制文件的副本将被写入CONTROL_FILES初始化参数中列出的所有位置。

6.4.1.6控制文件还原到一个新的位置

还原控制文件到一个或多个新的位置的方法之一是要改变CONTROL_FILES初始化参数,然后使用不带参数的RESTORE CONTROLFILE命令恢复控制文件的默认位置。例如,如果一个磁盘出现故障使得某些但并非所有CONTROL_FILES中所指定的位置上的控制文件不可用,你可以通过改变CONTROL_FILES替换出现故障的磁盘路径指向到另一个好的磁盘,然后使用不带参数运行RESTORE CONTROLFILE命令来还原控制文件。

通过使用         RESTORE CONTROLFILE TO '                filename         ' [FROM AUTOBACKUP]                这种格式的命令,还可以将控制文件还原到CONTROL_FILES地点以外你选择的任何位置:

RESTORE CONTROLFILE TO '/tmp/my_controlfile';      
你可以在处于NOMOUNT,MOUNT或OPEN状态的数据库执行此操作,因为你没有覆盖任何目前使用的控制文件。任何现有的文件名为'filename'的文件被覆盖。控制文件还原到一个新的位置后,您可以更新CONTROL_FILES初始化参数,包括新的位置。

另见:
Oracle数据库备份和恢复参考关于RESTORE CONTROLFILE的语法。      
6.4.1.7当使用备份控制文件的限制

当您使用备份控制文件还原数据库之后,你必须运行RECOVER DATABASE,对数据库执行一个OPEN RESETLOGS操作。

有关在不同的场景(如使用恢复目录,或从一个特定的备份还原)使用RESTORE CONTROLFILE限制的更多细节,请参阅Oracle数据库备份和恢复参考关于RESTORE CONTROLFILE讨论。

6.4.2从备份中还原服务器参数文件(SPFILE)

如果你失去了你的服务器参数文件(SPFILE),RMAN可以将其还原到其默认位置或您选择的位置。

不像失去控制文件,您的SPFILE的丢失不会导致您的实例立即停止。您的实例可以继续操作,在还原了SPFILE之后你将不得不将其关闭并重新启动它。

在还原SPFILE时请注意以下几点:

。如果实例已经按照服务器参数文件启动,那么你不能覆盖现有的服务器参数文件。

。当使用客户端初始化参数文件启动实例时,RMAN还原SPFILE到默认的SPFILE的位置,如果不使用TO子句。默认位置是与特定平台相关的(例如,在Linux平台上是         ?/dbs/spfile.ora                )。

。在使用恢复目录还原SPFILE的这种情况可以简化你的恢复过程,因为此时可以避免不得不记录并记住您的DBID这一步。这里的过程假定您不使用恢复目录。

RMAN也可以基于一个SPFILE备份创建一个客户端初始化参数文件。

要还原服务器参数文件:

1.如果数据库在SPFILE的丢失时已经启动,连接到目标数据库。例如,运行:

% rman TARGET /      
如果丢失SPFILE时数据库未启动,并且你不使用恢复目录,那么你必须设置目标数据库的DBID。为确定您的DBID的详细信息,请参见“确定的DBID”。

2.关闭实例,并按NOMOUNT重新启动它。当SPFILE不可用时,RMAN使用一个哑参数文件启动实例。例如:

RMAN> STARTUP FORCE NOMOUNT;      
3.还原服务器参数文件。如果恢复到默认位置,那么运行:

RMAN> RESTORE SPFILE FROM AUTOBACKUP;       
如果还原到非默认位置,那么你可以按照下面的例子的格式运行命令:

RMAN> RESTORE SPFILE TO '/tmp/spfileTEMP.ora' FROM AUTOBACKUP;      
4. 使用还原的文件重新启动实例。如果要用非默认位置的服务器参数文件重新启动实例,那么创建一个新的客户端初始化参数文件,此文件包含单独的一行SPFILE = new_location,其中的new_location是还原的服务器参数文件的路径名。然后,用客户端初始化参数文件重新启动此实例。

例如,创建一个文件/tmp/init.ora中包含单独的一行:

SPFILE=/tmp/spfileTEMP.ora      
然后使用这一RMAN命令在还原的SPFILE的基础上重新启动此实例:

RMAN> STARTUP FORCE PFILE=/tmp/init.ora; # startup with /tmp/spfileTEMP.ora      
6.4.2.1,从控制文件自动备份进行SPFILE的还原

如果你已经配置控制文件自动备份,无论何时进行了自动备份,SPFILE便会连同控制文件一起被备份。

如果你想从自动备份中还原SPFILE,你必须首先设置你的数据库的DBID,然后使用RESTORE SPFILE FROM AUTOBACKUP命令。该过程类似于从自动备份中还原控制文件。首先,你必须设置你的数据库的DBID,然后使用         RESTORE CONTROLFILE FROM AUTOBACKUP                 命令:

RMAN> SET DBID 320066378;      
RMAN> RUN {      
    SET CONTROLFILE AUTOBACKUP FORMAT       
          FOR DEVICE TYPE DISK TO 'autobackup_format';      
    RESTORE SPFILE FROM AUTOBACKUP;      
    }      
RMAN使用自动备份格式和DBID查找控制文件自动备份,如果发现了一个控制文件自动备份,从该备份还原SPFILE到其默认位置。

有关如何确定正确的autobackup_format值的信息,请参阅Oracle数据库备份和恢复参考的CONFIGURE中的条目         CONFIGURE CONTROLFILE AUTOBACKUP FORMAT                 的描述

如何确定您的DBID的详细信息,请参见“确定的DBID”。

6.4.2.2用RMAN创建一个客户端初始化参数文件(PFILE中)

你也可以使用         TO              PFILE                 'filename'子句还原服务器参数文件作为一个客户端初始化参数文件。你指定的文件名应该在RMAN客户端运行的主机上可访问的文件系统中。这个文件不一定直接从运行实例的主机上进行访问。此命令创建一个PFILE,它是运行RMAN客户端系统上的文件/tmp/initTEMP.ora:

RMAN> RESTORE SPFILE TO PFILE '/tmp/initTEMP.ora';      
为了使用的客户端PFILE重新启动实例,使用下面的命令,再次运行同一台客户机上的RMAN:

RMAN> STARTUP FORCE PFILE='/tmp/initTEMP.ora';      
6.4.3还原和恢复数据文件和表空间

在“还原和完全恢复单个表空间或数据文件:情景”描述了还原一个表空间到其原始位置,并执行介质恢复的过程。然而,你可能需要将一个数据文件还原到其原始位置以外的位置,例如,如果包含数据文件的原始位置的磁盘失败。

6.4.3.1从备份还原数据文件到一个新的位置      
在从备份还原数据文件到一个新位置中的重要一步,是更新控制文件以反映数据文件的新位置。下面的例子说明使用RMAN 的SET NEWNAME命令指定新的名称,SWITCH命令用来更新控制文件开始引用新名称所指定的数据文件。

当还原数据文件备份到其原始位置,你应该在开始从备份中还原数据文件到一个新的位置时将受影响的表空间脱机。

然后,创建一个RUN块,包括          RESTORE                和RECOVER命令。对于被移动到一个新的位置的每个文件,使用SET NEWNAME命令来指定该文件的新位置。

接着,仍然在RUN块内,按正常的方式运行RESTORE TABLESPACE或RESTORE DATAFILE命令。 RMAN还原每个数据文件到NEWNAME指定的位置,而不是其原始位置。

在RUN块内在RESTORE命令之后,但在RECOVER命令之前,使用一个         SWITCH                 命令,用数据文件的新文件名更新控制文件。         SWITCH                命令与SQL语句         ALTER              DATABASE              RENAME              FILE                是等效的。         SWITCH              DATAFILE              ALL                更新控制文件来反映在RUN块中所有通过已发出的SET NEWNAME命令所涉及的数据文件的新名称。

这个例子将在表空间          users                和          tools                中的数据文件还原到一个新的位置,然后执行恢复。假设旧的数据文件存储在目录/olddisk中,而新的将被存放在/newdisk中。

RUN      
{      
  SQL 'ALTER TABLESPACE users OFFLINE IMMEDIATE';      
  SQL 'ALTER TABLESPACE tools OFFLINE IMMEDIATE';      
  # specify the new location for each datafile      
  SET NEWNAME FOR DATAFILE '/olddisk/users01.dbf' TO       
                           '/newdisk/users01.dbf';      
  SET NEWNAME FOR DATAFILE '/olddisk/tools01.dbf' TO       
                           '/newdisk/tools01.dbf';      
  # to restore to an ASM disk group named dgroup, use:       
  # SET NEWNAME FOR DATAFILE '/olddisk/trgt/tools01.dbf'      
  #     TO '+dgroup';      
  RESTORE TABLESPACE users, tools;      
  SWITCH DATAFILE ALL;   # update control file with new filenames      
  RECOVER TABLESPACE users, tools;      
}      
如果恢复成功,然后将表空间联机:

SQL 'ALTER TABLESPACE users ONLINE';      
SQL 'ALTER TABLESPACE tools ONLINE';      
另见:
Oracle数据库备份和恢复参考有关         SWITCH                的语法      
6.4.3.2对一个已还原的数据库,表空间或数据文件执行介质恢复

介质恢复重新应用所有的存档和联机重做日志和可用的增量备份的改变到从备份中还原的数据文件中。

执行介质恢复最简单的方法是使用不带参数的RECOVER DATABASE命令:

RMAN> RECOVER DATABASE;      
您还可以针对单个表空间或数据文件执行介质恢复,或跳过某些表空间,而恢复数据库的其余部分,如下面的例子所示:

RMAN> RECOVER DATABASE SKIP TABLESPACE users;      
RMAN> RECOVER TABLESPACE users, tools;      
RMAN> RECOVER DATAFILE '/newdisk/users01.dbf','/newdisk/tools01.dbf';      
RMAN> RECOVER DATAFILE 4;      
RMAN将还原在备份恢复操作过程中所需的任何归档重做日志。如果备份存储在一个介质管理器上,注意必须提前或在RUN块中使用ALLOCATE CHANNEL命令配置通道使其能够访问存储在那里的​​备份。

与这些还原文件相关联的磁盘空间管理的一个非常有用的选项是DELETE ARCHIVELOG模式选项,这个选项使得还原时使用过的归档的重做日志一旦不再用于         RECOVER                 操作,就会将其从磁盘中删除:

RMAN> RECOVER TABLESPACE users, tools DELETE ARCHIVELOG;      
请注意,当为了执行RECOVER操作当RMAN还原归档重做日志文件到闪回恢复区,一旦还原的归档日志用于数据文件的恢复之后便被自动​​删除,哪怕你不使用DELETE ARCHIVELOG模式选项。

请参阅Oracle数据库备份和恢复参考关于RECOVER命令选项的更多细节。

6.4.3.3还原和恢复单个数据文件到一个新的位置:例子

这个过程将一个单独的数据文件还原到一个新的位置上然后执行介质恢复。如果是由于介质故障等问题而无法访问原来的位置,这一过程可以让你还原和恢复数据文件。

RUN {      
    SET NEWNAME FOR DATAFILE 3 to 'new_location';      
    RESTORE DATAFILE 3;      
    SWITCH DATAFILE 3;      
    RECOVER DATAFILE 3;      
}      
如果你想存储数据文​​件到一个新的Oracle管理文件的位置,你可以使用下列形式的命令:

RUN {      
    SET NEWNAME FOR DATAFILE 3 to NEW;      
    RESTORE DATAFILE 3;      
    SWITCH DATAFILE 3;      
    RECOVER DATAFILE 3;      
}      
Oracle通过生成相应的文件名将还原的文件存储在一个OMF位置。

6.4.4从备份中还原归档重做日志

RMAN根据执行恢复的需要将自动地从备份中还原归档的重做日志文件。

不过,如果你愿意你也可以通过手动还原归档重做日志,以节省在执行RECOVER命令期间需要还原这些文件的所需要时间,或者如果您想在某些新位置存储还原的归档重做日志文件。

默认情况下,RMAN根据目标数据库的参数LOG_ARCHIVE_FORMAT和LOG_ARCHIVE_DEST_1构建的名称还原归档重做日志。这些参数按照一个平台特定的格式进行组合,形成还原归档日志名称。

6.4.4.1将归档重做日志还原到一个新的位置

你可以用         SET              ARCHIVELOG              DESTINATION                命令覆盖还原归档重做日志的默认位置。在进行数据库还原时,此命令手动设置归档日志到不同的位置。在恢复期间,RMAN知道在哪里能找到新还原的归档日志,它不要求它们在初始化参数文件中指定的位置上。

将归档重做日志还原到一个新的位置:

1.在连接到目标数据库后,确保数据库已经处于装载(MOUNT)或打开(OPEN)状态。

2.在RUN块内执行以下操作,如下面的示例脚本所示:

a.使用         SET              ARCHIVELOG              DESTINATION                命令为还原归档重做日志指定新的位置。

b.还原归档的重做日志。

这个例子将所有备份归档日志还原到一个新的位置:

RUN      
{       
  SET ARCHIVELOG DESTINATION TO '/oracle/temp_restore';      
  RESTORE ARCHIVELOG ALL;      
  # restore and recover datafiles as needed      
  .      
  .      
  .      
}      
6.4.4.2归档重做日志还原到多个位置

为了在多个位置之间分配还原日志,您可以在一个运行块中为归档日志多次指定还原的位置。 (但是在还原期间,你不能同时指定多个位置以产生相同日志的多个副本。)您可以使用此功能来管理用于存储还原日志的磁盘空间。

这个例子从备份还原300个归档重做日志,将它们分别存储在3个不同的目录/fs1/tmp,/fs2/tmp,和/fs3/tmp中:

RUN       
{       
  # Set a new location for logs 1 through 100.      
  SET ARCHIVELOG DESTINATION TO '/fs1/tmp';      
  RESTORE ARCHIVELOG FROM SEQUENCE 1 UNTIL SEQUENCE 100;      
  # Set a new location for logs 101 through 200.      
  SET ARCHIVELOG DESTINATION TO '/fs2/tmp';      
  RESTORE ARCHIVELOG FROM SEQUENCE 101 UNTIL SEQUENCE 200;      
  # Set a new location for logs 201 through 300.      
  SET ARCHIVELOG DESTINATION TO '/fs3/tmp';      
  RESTORE ARCHIVELOG FROM SEQUENCE 201 UNTIL SEQUENCE 300;      
  # restore and recover datafiles as needed      
  .      
  .      
  .      
}      
当你发出一个RECOVER命令时,RMAN自动跨越它们还原的多个位置找到所需的已经还原的归档日志,并将其应用于数据文件的恢复。