诊断和响应故障_执行完全数据库恢复(Complete Database Recovery)

本章阐述如何在丢失一个或多个数据文件之后使用RMAN恢复数据库到正常操作。

1.完全数据库恢复概述

1.1.完全数据库恢复的目的

完全恢复是恢复数据库到最近的时间点,不丢失任何提交的事务。

本章假设某些或全部数据文件丢失或损坏。一般来说,这种情形是由介质故障或意外删除造成。你的目标是通过从RMAN备份中还原损坏的文件和恢复所有数据库更改来恢复数据库到正常操作。


1.2.本章的范围

本节描述的完全恢复操作遵循某些条件。

本章假设以下条件:
1)已经丢失某些或所有数据文件,目标是恢复所有更改,但没有丢失所有当前的控制文件或整个在线redo日志组。
2)数据库使用当前的spfile。
3)有需要用来恢复数据文件备份的完整的归档redo日志集和增量备份。每个数据文件要么有一个备份,或者没有备份但有一个完整的在线和归档redo日志集追溯到数据文件的创建时期。
在还原和恢复的过程中,RMAN可以处理丢失的数据文件而不用用户介入。当数据文件丢失时,可能的情况可以分类如下:
a.控制文件知道数据文件的情况,即在数据文件创建后备份了控制文件,但数据文件本身没有备份。如果数据文件记录在控制文件中,那么RESTORE创建数据文件在原来的位置或用户指定的位置。然后RECOVER命令可以应用必要的日志到数据文件。
b.控制文件没有数据文件的记录,即在数据文件创建后没有备份控制文件。在恢复过程中,数据文件检测到缺失的数据文件和报告给RMAN,它创建数据文件和通过应用剩余的日志继续恢复。如果数据文件创建在一个父转生中,那么在还原或恢复阶段视情况创建
4)不是在还原和恢复加密的表空间。
如果在加密的表空间上执行介质恢复,那么当执行表空间的介质恢复时,Oracle密钥库必须是打开的。
5)数据库运行在单实例的配置中。
虽然RMAN可以还原和恢复Oracle RAC和Data Guard配置中的数据库,这些场景不在本手册的范围。
6)你正在使用RMAN客户端而不是OEM(Oracle Enterprise Manager)。


2.准备完全数据库恢复

2.1.识别要还原或恢复的数据库文件

确认哪些文件需要还原或恢复的技术取决于丢失的文件类型。

2.1.1.鉴别丢失的控制文件

当任何多路复用的控制文件变成不可访问时,数据库会立即关闭。

如果在CONTROL_FILES初始化参数中指定的每个位置中没有一个有效的控制文件时尝试启动数据库,那么数据库报告一个错误。

丢失某些而不是所有控制文件副本不需要从备份中还原控制文件。如果至少一个控制文件保持完整,那么可以复制控制文件的一个完整副本覆盖损坏或缺失的控制文件,或更新初始化参数文件以便它不会指向损坏或缺失的控制文件。在CONTROL_FILES参数只指向当前存在的控制文件的完整副本之后,你可以重启数据库。

如果从备份中还原控制文件,那么必须执行整个数据库的介质恢复和使用OPEN RESETLOGS选项打开数据库,即使没有数据文件必须被还原。


2.1.2.鉴别要求介质恢复的数据文件

决定何时和如何恢复取决于数据库的状态和数据文件的位置。

使用RMAN或SQL*Plus来鉴别需要介质恢复的数据文件。

2.1.2.1.使用RMAN鉴别数据文件

一个简单的确认哪些数据文件缺失的方法是运行VALIDATE DATABASE命令。

以下示例验证数据库和尝试读取所有指定的数据文件:
RMAN> VALIDATE DATABASE;

Starting validate at 20-OCT-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=90 device type=DISK
could not read file header for datafile 7 error reason 4
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 10/20/2013 13:05:43
RMAN-06056: could not access datafile 7

VALIDATE DATABASE命令的输出标示数据文件7不能被访问。可以运行REPORT SCHEMA命令来获取数据文件7的表空间名称和文件名称:
RMAN> REPORT SCHEMA;

Report of database schema for database with db_unique_name RDBMS
List of Permanent Datafiles
===========================
File Size(MB) 	Tablespace 			RB segs 	Datafile Name
---- -------- -------------------- ------- ------------------------
1 		450 	 SYSTEM 			*** 	+DATAFILE/tbs_01.f
2 		86 		 SYSAUX 			*** 	+DATAFILE/tbs_ax1.f
3 		15		 UD1 			    *** 	+DATAFILE/tbs_undo1.f
4 		2 		SYSTEM 			    *** 	+DATAFILE/tbs_02.f
5 		2 		TBS_1 			    *** 	+DATAFILE/tbs_11.f
6 		2 		TBS_1 			    *** 	+DATAFILE/tbs_12.f
7 		2 		TBS_2 			    *** 	+DATAFILE/tbs_21.f
List of Temporary Files
=======================
File Size(MB) Tablespace 			Maxsize(MB) 	Tempfile Name
---- -------- -------------------- ----------- --------------------
1 		40 		TEMP 				32767 		+DATAFILE/tbs_tmp1.f

2.1.2.2.使用SQL鉴别数据文件

虽然VALIDATE DATABASE是一个确认文件是否不能被访问的好方法,你可能想使用SQL查询来获取更详细的信息。

确认数据文件是否需要介质恢复:
1)启动SQL*Plus,使用管理员权限连接到目标数据库实例。

2)执行以下SQL查询确认数据库的状态:
SELECT STATUS FROM V$INSTANCE;

如果状态是OPEN,那么数据库是打开状态的。不过,某些数据文件可能要求介质恢复。

3)查询V$DATAFILE_HEADER来确认数据文件的状态。运行以下SQL语句来检查数据文件头部:
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,那么数据文件头部不能被读取和验证。检查造成错误的临时的硬件或操作系统问题。如果没有这些问题,那么必须还原文件或切换到副本。

如果ERROR列是NULL和RECOVER列是YES,那么文件需要介质恢复(也可能需要从备份还原)。

注:因为V$DATAFILE_HEADER只读取每个数据文件的头部块,它不检测所有需要还原数据文件的问题。例如,这个视图不能辨别数据文件是否包含损坏数据块

4)可选地,查询V$RECOVER_FILE按数据文件序号列出需要恢复的数据文件和它们的状态和错误信息。例如,执行以下查询:
SELECT FILE#, ERROR, ONLINE_STATUS, CHANGE#, TIME
FROM V$RECOVER_FILE;

注:不能与从备份中还原的控制文件或在介质故障影响数据文件的时间之后重建的控制文件一起使用V$RECOVER_FILE。还原或重建的控制文件不包含需要用来准确更新V$RECOVER_FILE的信息。

为了找到数据文件和表空间名称,也可以使用数据文件序号和V$DATAFILE和V$TABLESPACE视图执行连接,如下例所示。
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列为每个需要恢复的文件查明问题。


2.2.确认数据库DBID

建议记录数据库的DBID。

在要求从自动备份中恢复spfile或控制文件的情形中,必须知道DBID。确信记录DBID和其它关于数据库的基本信息。

如果没有记录数据库的DBID,那么可以不打开数据库的情况下在以下地方找到它:
1)DBID被用于形成控制文件自动备份的名称。定位到文件来确认在文件名称中出现的DBID(不一定是)。
2)如果有任何保存RMAN会话输出的文本文件,那么DBID会在RMAN客户端启动和连接到数据库时显示。典型的输出如下:
$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Tue Aug 2 22:17:41 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
connected to target database: ORCL (DBID=1621429708)

2.3.预览还原操作中使用的备份

预览备份帮助确保所有需要用来还原和恢复操作的备份是可用的。

可以应用RESTORE … PREVIEW到任何RESTORE操作,创建在请求的RESTORE操作中使用的每个备份的详细列表和在RESTORE操作完成之后恢复的目标SCN。这个命令用访问RMAN仓库查询备份元数据,但不实际读取备份文件来确保它们可以被还原

作为RESTORE … PREVIEW的替换选项,可以使用RESTORE … VALIDATE HEADER命令。除了列出需要用于还原和恢复的文件,命令RESTORE … VALIDATE HEADER还验证备份文件头部来确认磁盘上或在介质管理目录中的文件是否与RMAN仓库中的元数据符合。

当计划还原和恢复操作时,使用RESTORE … PREVIEW或RESTORE … VALIDATE HEADER来确保所有需要的备份是可用的或鉴别你想指导RMAN使用或避免特定的备份的情形。

预览要在还原操作中使用的备份:
1)运行RESTORE命令和PREVIEW选项
例如,运行以下的一个命令:
RESTORE DATABASE PREVIEW;
RESTORE ARCHIVELOG FROM TIME ‘SYSDATE-7’ PREVIEW;

如果RESTORE … PREVIEW生成的报告提供太多信息,那么如以下示例所示指定SUMMARY选项:
RESTORE DATABASE PREVIEW SUMMARY;

如果满意输出,那么在这儿停止。如果输出指示RMAN将会请求一个暂时不可用的磁带上的备份,那么继续这个步骤。如果输出指示备份存储在场外(off-site),那么跳到“调用场外备份”章节。

2)如果需要,使用CHANGE命令设置任何暂时不可用的备份的状态为UNAVAILABLE。

3)可选地,再次运行RESTORE … PREVIEW来确认还原操作不会尝试使用不可用的备份。


2.3.1.调用场外备份(Recalling Off-site Backups)

场外备份存储在远程位置,比如安全存储设施,不能被还原除非介质管理器去检索介质。

某些介质管理器提供关于哪些备份是场外的状态信息给RMAN。场外的备份在RMAN仓库中被标记为AVAILABLE,即使在备份可以被还原之前必须从存储中检索介质。如果RMAN尝试还原一个场外的备份,那么还原任务失败。

调用场外备份:
1)(可选)使用RESTORE … PREVIEW命令识别场外的备份。这个命令的输出标示备份是否在场外存储,如下示例中的文本所示:

List of Backup Sets
===================
BS Key Size Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
9 2.25M SBT_TAPE 00:00:00 21-MAY-13
BP Key: 9 Status: AVAILABLE Compressed: NO Tag:TAG20130521T144258
Handle: 0aii9k7i_1_1 Media: 0aii9k7i_1_1
List of Archived Logs in backup set 9
Thrd 	Seq 	Low SCN Low Time 	Next SCN Next Time
---- ------- ---------- --------- ---------- ---------
1 		1 		392314	21-MAY-13 	392541 	21-MAY-13
1 		2 		392541 	21-MAY-13 	392545 	21-MAY-13
1 		3 		392545 	21-MAY-13 	392548 	21-MAY-13
1 		4 		392548 	21-MAY-13 	395066 	21-MAY-13
1 		5 		395066 	21-MAY-13 	395095 	21-MAY-13
1 		6 		395095 	21-MAY-13 	395355 	21-MAY-13
List of remote backup files
============================
Handle: aii9k7i_1_1 Media: 0aii9k7i_1_1
validation succeeded for backup piece
Finished restore at 21-MAY-13
released channel: dev1

可以使用RESTORE … PREVIEW RECALL指示介质管理器让场外备份可用。

2) 如果备份在场外存储,那么执行RESTORE … PREVIEW命令和RECALL选项。

以下示例发起调用在第1步中显示的场外的归档日志备份:
RESTORE ARCHIVELOG ALL PREVIEW RECALL;

以下示例输出标示RMAN发起调用:

Initiated recall for the following list of remote backup files
==========================================================
Handle: VAULT0aii9k7i_1_1 Media: /tmp,VAULT0aii9k7i_1_1
validation succeeded for backup piece
Finished restore at 21-MAY-13
released channel: dev1

3)运行RESTORE … PREVIEW命令。如果必要,返回到之前的步骤直到没有需要用来还原操作的备份报告为场外为止。


2.4.在还原前验证备份

验证备份确认备份是否可用的。

虽然还原预览操作的输出标示哪些备份会被还原,但备份的可用性是没有实际验证的。可以运行RMAN命令为任何RESTORE操作测试可用备份的可用性或测试RESTORE操作中使用的特定的备份的内容,实际读取备份的内容和检查损坏。

使用以下一个验证选项:
1)RESTORE … VALIDATE测试RMAN是否可以从备份还原一个特定的对象。RMAN自动选择备份来使用。
2)VALIDATE BACKUPSET测试指定的备份集的有效性。


2.5.还原恢复需要的归档redo日志

RMAN按需要自动从备份还原归档redo日志来执行恢复。

也可以手动还原归档redo日志以节省后面执行RECOVER命令过程中还原这些文件需要的时间,或如果想存储还原的归档redo日志文件在新的位置。RMAN也提供还原所有归档redo日志文件,当前的归档redo日志或来自一个特定的之前的数据库转生的归档redo日志文件的灵活性。

如果在灾难恢复过程中缺失归档redo日志,使用UNTIL AVAILABLE REDO选项,RMAN让你自动进行数据库恢复直到最后可用的归档redo日志只有在执行整个数据库的恢复时可以使用这个选项。不支持为数据文件,表空间或PDB使用这个选项。如果为PDB执行时间点恢复,必须提供SCN号作为恢复点。

缺省情况下,RMAN还原使用目标数据库的LOG_ARCHIVE_FORMAT和最大的LOG_ARCHIVE_DEST_n参数构成的名称的归档redo日志。这些参数以平台特定的方式组合形成还原归档日志的名称。


2.5.1.还原归档redo日志到新的位置

RMAN让你可以覆盖还原的归档redo日志文件的缺省位置。

当数据库还原操作正在发生时,命令SET ARCHIVELOG DESTINATION手动将归档日志指向新的位置。在恢复过程中,RMAN知道从哪里去找到新的还原归档日志,它不要求它们在初始化参数文件中指定的位置中。

还原归档redo日志到新的位置:
1)启动RMAN,连接到目标数据库。

2)确保数据库挂载或打开。

3) 在RUN命令中执行以下操作:
a.使用SET ARCHIVELOG DESTINATION为还原的归档redo日志指定新的位置
b.明确还原归档redo日志或执行自动还原日志的命令

以下RUN命令示例明确还原所有备份归档日志到一个新的位置:
RUN
{
    SET ARCHIVELOG DESTINATION TO ‘/oracle/temp_restore’;
    RESTORE ARCHIVELOG ALL;
    # restore and recover data files as needed
    .
    .
    .
}

以下示例设置归档日志目的地,然后使用RECOVER DATABASE自动从目的地还原归档日志:
RUN
{
    SET ARCHIVELOG DESTINATION TO ‘/oracle/temp_restore’;
    RESTORE DATABASE;
    RECOVER DATABASE;     # restores and recovers logs automatically
}


2.5.2.还原归档redo日志到多个位置

为管理用来容纳还原日志的磁盘空间,可以在一个RUN块中为归档日志多次指定还原目的地从而在多个目的地当中分布还原日志

注意你可以在还原操作过程中同时指定多个目的地来生成相同日志的多个副本。

以下示例从备份中还原300个归档redo日志,分布它们在目录/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 data files as needed
    .
    .
    .
}

当执行RECOVER命令时,RMAN自动在还原的目的地找到需要的还原的归档日志,应用它们到数据文件。


3.执行完全数据库恢复

在完全恢复过程中RMAN还原一个或多个数据文件,然后应用所有在还原的备份之后生成的redo。

3.1.关于完全数据库恢复

使用RESTORE和RECOVER命令还原和恢复数据库。

在还原过程中,RMAN自动还原任何需要的归档redo日志的备份。如果备份存储在介质管理器上,那么必须预先配置通道或在RUN块中使用ALLOCATE CHANNEL命令来启用访问存储在那里的备份。

如果RMAN在恢复过程中还原归档redo日志到快速恢复区域,那么它在应用它们到数据文件后自动删除还原的日志。否则,当它们不再需要用于恢复时,可以使用DELETE ARCHIVELOG命令从磁盘删除还原的归档redo日志。例如,可以输入以下命令:
RECOVER DATABASE DELETE ARCHIVELOG;


3.1.1.关于还原数据文件到非缺省位置

如果不能还原数据文件到它们的缺省位置,那么必须更新控制文件来反映数据文件的新位置。

在RUN命令中使用RMAN的SET NEWNAME命令指定新的文件名称。然后,使用SWITCH命令来更新控制文件中的数据文件名称。SWITCH DATAFILE ALL更新控制文件来反映所有在RUN命令中已经执行SET NEWNAME的数据文件的新名称。


3.2.执行整个数据库的完全恢复

这个场景假设数据库trgt已经丢失大部分或所有它的数据文件。它也假设数据库使用一个快速恢复区域。

在还原和恢复整个数据库之后,当数据库打开时,记录在控制文件中的缺失的临时表空间会使用之前的创建大小,AUTOEXTEND和MAXSIZE属性重建。只有缺失的临时表空间才会重建。如果临时文件在记录在RMAN仓库中的位置存在但没有有效的头部,那么RMAN不会重建临时文件。

如果临时文件作为OMF(Oracle Managed Files)创建,那么它们会重建在当前的DB_CREATE_FILE_DEST位置。否则,它们会在之前的位置重建。如果RMAN由于I/O错误或某些其它原因不能重建文件,那么错误被报告在alert日志中,数据库打开操作会继续。

还原和恢复整个数据库:
1)完成在“准备完全数据库恢复”章节中描述的准备步骤。

2)启动RMAN,连接到目标数据库和恢复目录(如果有使用的话)。

当连接时RMAN显示数据库的状态:not started,not mounted,not open(当数据库挂载但没有打开时),或空(当数据库打开时)。

3)如果数据库没有挂载,那么挂载但不打开数据库。
STARTUP MOUNT;

4) 使用SHOW命令来查看预配置了哪些通道。
SHOW ALL;

RMAN configuration parameters for database with db_unique_name PROD1 are:

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 1 BACKUP TYPE TO BACKUPSET; #default
CONFIGURE CHANNEL DEVICE TYPE ‘SBT_TAPE’ PARMS “SBT_LIBRARY=/usr/local/oracle/backup/lib/libobk.so”;

如果必要的设备和通道已经配置,那么不需要配置。否则,可以使用CONFIGURE命令来配置自动的通道或包含ALLOCATE CHANNEL命令在RUN块中。

5)还原和恢复数据库。执行以下一个操作:
a.如果还原所有数据文件到它们的原来位置,那么在RMAN提示符下按顺序执行RESTORE DATABASE和RECOVER DATABASE。
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;

如果手动分配通道,那么必须在RUN块中一起执行RESTORE和RECOVER命令:
RUN
{
    ALLOCATE CHANNEL c1 DEVICE TYPE sbt;
    RESTORE DATABASE;
    RECOVER DATABASE;
}

b.如果还原某些数据文件到新的位置,那么按顺序在RUN块中执行RESTORE DATABASE和RECOVER DATABASE。使用SET NEWNAME重命名数据文件。

以下示例还原数据库,为3个数据文件指定新名称,然后恢复数据库:
RUN
{
    SET NEWNAME FOR DATAFILE 2 TO ‘/disk2/df2.dbf’;
    SET NEWNAME FOR DATAFILE 3 TO ‘/disk2/df3.dbf’;
    SET NEWNAME FOR DATAFILE 4 TO ‘/disk2/df4.dbf’;
    RESTORE DATABASE;
    SWITCH DATAFILE ALL;
    RECOVER DATABASE;
}

6)检查输出查看介质恢复是否成功。如果是,打开数据库。
ALTER DATABASE OPEN;


3.3.执行表空间的完全恢复

使用RESTORE和RECOVER命令与TABLESPACE选项一起执行表空间的完全恢复。

在基础场景中,数据库是打开的,某些但不是所有数据文件损坏。你想还原和恢复损坏的表空间,同时让数据库打开以便数据库的剩余部分保持可用。这个场景假设数据库TRGT丢失了表空间USERS。

还原和恢复表空间:
1)完成在“准备完全数据库恢复”章节中描述的准备步骤。

2)启动RMAN,连接到目标数据库和恢复目录(如果有使用的话)。

3)如果数据库是打开的,将需要恢复的表空间脱机。
ALTER TABLESPACE users OFFLINE IMMEDIATE;

4)使用SHOW命令查看预配置了哪些通道。
SHOW ALL;

RMAN configuration parameters for database with db_unique_name PROD1 are:

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 1 BACKUP TYPE TO BACKUPSET; #default
CONFIGURE CHANNEL DEVICE TYPE ‘SBT_TAPE’ PARMS “SBT_LIBRARY=/usr/local/oracle/backup/lib/libobk.so”;

如果必要的设备和通道已经配置,那么不需要配置。否则,可以使用CONFIGURE命令来配置自动的通道或包含ALLOCATE CHANNEL命令在RUN块中。

5)还原和恢复表空间。执行以下一个操作:
a.如果还原数据文件到它们的原来位置,那么在RMAN提示符下按顺序执行RESTORE TABLESPACE和RECOVER TABLESPACE。

例如,如果配置了自动通道,输入以下命令:
RMAN> RESTORE TABLESPACE users;
RMAN> RECOVER TABLESPACE users;

b.如果还原某些数据文件到新的位置,那么按顺序在RUN块中执行RESTORE TABLESPACE和RECOVER TABLESPACE。使用SET NEWNAME重命名数据文件。

以下示例还原表空间users中的数据文件到新的位置,然后执行恢复。假设旧的数据文件存储在/disk1路径,新的数据文件将会存储在/disk2路径。
RUN
{
# specify the new location for each datafile
    SET NEWNAME FOR DATAFILE ‘/disk1/oracle/dbs/users01.f’ TO’/disk2/users01.f’;
    SET NEWNAME FOR DATAFILE ‘/disk1/oracle/dbs/users02.f’ TO’/disk2/users02.f’;
    SET NEWNAME FOR DATAFILE ‘/disk1/oracle/dbs/users03.f’ TO’/disk2/users03.f’;
    RESTORE TABLESPACE users;
    SWITCH DATAFILE ALL; # update control file with new file names
    RECOVER TABLESPACE users;
}

6)检查输出查看介质恢复是否成功。如果是,将恢复的表空间联机。
ALTER TABLESPACE users ONLINE;


3.4.在切换到副本后执行完全恢复

可以通过切换到不可访问的数据文件的映像副本来恢复数据库。这个技术比传统的还原和恢复花费更少的时间因为不需要还原备份。

如果在快速恢复区域中含有不可访问的数据文件的映像副本,那可以使用SWITCH DATAFILE … TO COPY命令来将控制文件指向数据文件副本,然后使用RECOVER来恢复丢失的更改也可以使用SWITCH DATABASE TO COPY命令将控制文件指向整个数据库的副本

注:当表空间中的所有数据文件丢失和所有数据文件的副本存在时,这种情况下SWITCH TABLESPACE … TO COPY命令也受支持。


3.4.1.在切换到数据文件副本后执行完全恢复

当一个或多个数据文件损坏时,可以通过切换到损坏的数据文件现有的映像副本来执行恢复。

在基础场景中,数据库是打开的,某些但不是所有数据文件损坏。在一天的过程中,一个数据文件由于存储故障缺失。你必须修复这个文件,但不能承受从备份中执行还原和恢复的时间。你决定使用最近的映像副本备份作为新的文件,因此消除还原时间。这个场景假设数据库trgt已经丢失数据文件4。

切换到数据文件副本和执行恢复:
1)完成在“准备完全数据库恢复”章节中描述的准备步骤。

2)启动RMAN,连接到目标数据库和恢复目录(如果有使用的话)。

3)如果数据库是打开的,将需要恢复的表空间脱机。
ALTER DATABASE DATAFILE 4 OFFLINE;

4)切换脱机的数据文件到最近的副本。
输入以下命令将控制文件指向数据文件4最近的映像副本:
SWITCH DATAFILE 4 TO COPY;

5)使用RECOVER DATAFILE命令恢复数据文件。
RECOVER DATAFILE 4;

RMAN自动还原归档redo日志和增量备份。因为数据库使用一个快速恢复区域,RMAN在已经应用它们后自动删除日志。

6)检查输出查看介质恢复是否成功。如果是,将恢复的数据文件联机。
ALTER DATABASE DATAFILE 4 ONLINE;


3.4.2.在切换到数据库副本后执行完全恢复

可以通过切换到损坏的数据文件的映像副本而不是还原这些数据文件来执行完全数据库恢复。

在这个场景中,数据库是关闭的,所有的数据文件已损坏。你有所有损坏的数据文件的映像副本和决定使用现有的映像副本作为新的数据文件,因此消除还原时间。

切换到数据库副本和执行恢复:
1)完成在“准备完全数据库恢复”章节中描述的准备步骤。

2)启动RMAN,连接到目标数据库和恢复目录(如果有使用的话)。

3)挂载数据库。

4)切换数据库到最近的副本。
输入以下命令将控制文件指向最近的数据库映像副本。
SWITCH DATABASE TO COPY;

5)使用RECOVER DATABASE命令恢复数据库。
RECOVER DATABASE;

RMAN自动还原归档redo日志和增量备份。因为数据库使用一个快速恢复区域,RMAN在已经应用它们后自动删除日志。

6)检查输出查看介质恢复是否成功。如果是,打开数据库。
ALTER DATABASE OPEN;




来源:《Oracle Database Backup and Recovery User’s Guide,19c》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值