客服微信
本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
本章提供了最重要的RMAN概念和任务的最简要的摘要。它不能替代备份和恢复文档集的其他部分。
恢复管理器(RMAN)是一个Oracle数据库客户端,它在数据库上执行备份和恢复任务,并自动管理备份策略。它大大简化了数据库文件的备份、恢复和恢复。
RMAN环境由在备份数据中发挥作用的实用程序和数据库组成。RMAN的环境至少必须包括以下组件:
RMAN客户端是通过在操作系统的命令提示符下发出RMAN命令来启动的。RMAN将显示有关命令的提示符,如下示例所示:
% rman RMAN>
到数据库的RMAN连接以与到数据库的SQL*Plus连接相同的方式指定和进行身份验证。唯一的区别是,到目标数据库或辅助数据库的RMAN连接需要SYSDBA或系统备份权限。任何用户都可以被授予此特权。
您可以使用命令行选项或使用连接目标命令连接到数据库。下面的示例启动RMAN,然后通过Oracle Net作为用户sbu连接到目标数据库,这是通过系统备份权限创建的。RMAN会提示您输入密码。
% rman RMAN> CONNECT TARGET "sbu@prod AS SYSBACKUP" target database Password: password connected to target database: PROD (DBID=39525561)
当使用多租户体系结构时,您可以连接到根数据库或指定的可插拔数据库(PDB),如“使RMAN连接到CDB”中所述。
要退出RMAN客户端,请在RMAN提示符下输入EXIT:
RMAN> EXIT
通用RMAN命令行选项的语法
RMAN [ TARGET connectStringSpec | { CATALOG connectStringSpec } | LOG ['] filename ['] [ APPEND ] . . . ]... connectStringSpec::= ['] [userid] [/ [password]] [@net_service_name] [']
下面的示例将RMAN会话的输出附加到/tmp/ msglog.log上的文本文件中
% rman TARGET / LOG /tmp/msglog.log APPEND
为每个目标数据库都预先配置了RMAN备份和恢复环境。该配置是持久的,并适用于此目标数据库上的所有后续操作,即使您退出并重新启动RMAN。
RMAN配置设置可以指定备份设备、设置与这些设备的连接(称为通道)、设置影响备份策略的策略等等。
要显示数据库的当前配置:
1.启动RMAN并连接到目标数据库,如“启动RMAN并连接到数据库”中所述。
2.运行“显示ALL”命令。
例如,在RMAN提示符下输入如下命令:
RMAN> SHOW ALL;
使用备份命令来备份文件。RMAN将数据备份到请求的备份类型配置的默认设备。
默认情况下,RMAN会在磁盘上创建备份。如果启用了快速恢复区域,并且如果您没有指定format参数(参见表2-1),则RMAN将在恢复区域中创建备份,并自动给它们提供唯一的名称
默认情况下,RMAN会创建备份集,而不是创建映像副本。备份集由一个或多个备份部分组成,它们是以只有RMAN才能访问的格式写入的物理文件。一个多路备份集包含来自多个输入文件的块。RMAN可以将备份集写入磁盘或磁带。
如果将备份指定为COPY,则RMAN将每个文件复制为映像副本,这是在磁盘上创建的数据库文件的逐位副本。映像副本与使用操作系统命令创建的副本或Linux上的cp等命令创建的副本相同,但是被记录在RMAN存储库中,因此可以被RMAN使用。您可以在数据库打开时使用RMAN来制作映像副本。
指定备份件和副本的位置和名称。您必须使用替换变量来生成唯一的文件名。最常见的替代变量是%U,它将生成一个唯一的名称。其他内容包括DB_NAME的%d,%t表示备份集时间戳,%s表示备份集号,%p表示备份件号。
示例
BACKUP DATABASE FORMAT '/home/oracle/bak/cdb19c_full_%U.bak'; BACKUP FORMAT 'AL_%d/%t/%s/%p' ARCHIVELOG LIKE '%arc_dest%';
提问:在CDB下执行以下命令可以成功吗?
BACKUP DATABASE FORMAT '/home/oracle/bak/cdb19c_full.bak';
指定一个用户定义的字符串作为备份的标签。如果不指定标记,则RMAN将指定一个包含日期和时间的默认标记。标签总是以大写的形式存储在RMAN存储库中。
示例:
BACKUP TAG 'weekly_full_db_bkup' DATABASE MAXSETSIZE 10M;
4.2、归档模式下备份数据库
如果数据库以归档日志模式运行,则可以在数据库处于打开状态时备份该数据库。
如果备份在检查点之后包含更改,则称为不一致备份。如果您有恢复备份所需的存档重做日志,那么打开的数据库备份对于数据保护与一致备份一样有效。
在数据库打开时备份数据库和存档的重做日志:
1.启动RMAN并连接到目标数据库,如“启动RMAN并连接到数据库”中所述。
2.运行备份数据库命令。例如,在RMAN提示符下输入以下命令,将数据库和所有存档的重做日志文件备份到默认的备份设备:
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
4.3、非归档模式下备份数据库
如果数据库以无文件记录模式运行,那么唯一有效的数据库备份是一致的备份。
要使备份保持一致,必须在一致关闭后挂载数据库。恢复备份后并不特别需要恢复,但您将丢失在备份后进行的任何事务。您可以使用归档日志从一致的备份中恢复,以减少数据丢失。
要进行一致的数据库备份:
2.始终关闭数据库,然后装载它。
例如,输入以下命令,以确保数据库对于备份处于一致状态:
RMAN> SHUTDOWN IMMEDIATE; RMAN> STARTUP FORCE DBA; RMAN> SHUTDOWN IMMEDIATE; RMAN> STARTUP MOUNT;
3.运行备份数据库命令。
例如,在RMAN提示符下输入以下命令,将数据库备份到默认备份设备:
RMAN> BACKUP DATABASE;该命令的以下变体将创建数据库中所有数据文件的映像复制备份:
RMAN> BACKUP AS COPY DATABASE;
4.打开数据库并恢复正常操作。以下命令将打开数据库:
RMAN> ALTER DATABASE OPEN;
4.4、增量的备份
增量备份捕获在以前的增量备份后对数据库进行的块级更改。
如果指定增量备份,则RMAN将创建数据库的增量备份。增量备份通常比完整的数据库备份更小、更快。使用增量备份的恢复比单独使用重做日志更快
增量备份策略的起点是0级增量备份,它可以备份数据库中的所有块。0级的增量备份在内容上与完全备份相同,但是,与完全备份不同,0级备份被认为是增量备份策略的一部分。
1级增量备份只包含在以前的增量备份后更改的块。如果在运行1级备份时,当前或父数据库中不存在0级备份,则RMAN会自动进行0级备份。
第1级备份可以是累积增量备份,其中包括自最近的第0级备份以来已更改的所有块,也可以是差异增量备份,其中只包括自最近的增量备份以来已更改的块。默认情况下,增量备份是不同的。
在还原操作期间,RMAN将首先恢复0级备份,然后根据需要自动应用增量备份和重做日志。这将重新应用自备份开始以来对数据库所做的更改。
要对数据库进行增量备份:
1.启动RMAN并连接到目标数据库
2.运行备份增量命令。以下示例创建了一个0级增量备份,以作为增量备份策略的基础:
BACKUP INCREMENTAL LEVEL 0 DATABASE;
下面的示例创建一个1级累积增量备份:
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;
以下示例创建了1级差异增量备份:
BACKUP INCREMENTAL LEVEL 1 DATABASE;
4.5、增量更新的备份
增量更新的备份使您能够实现高效的增量永久备份策略。
RMAN增量更新的备份功能具有以下主要功能:
使用标记来识别作为备份策略基础的数据文件副本的标记。RMAN会自动为此副本的每个一级备份分配相同的标记。如果在当前或父数据库化身中不存在带有指定标记的0级数据文件副本,则RMAN将创建带有指定标记的0级数据文件副本。
示例
BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE;
示例
BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY DATAFILECOPY FORMAT '/home/oracle/fast_recovery/df1.cpy' DATABASE;
要实现逐步更新的备份策略:
1.启动RMAN并连接到目标数据库
2.运行恢复COPY和备份增量命令。
实现基于增量更新备份的策略所需的脚本。
RECOVER COPY OF DATABASE WITH TAG 'incr_update'; BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE;
4.6、检验数据文件和备份
RMAN验证将检查一个备份,以确定是否可以恢复该备份。验证还将检查是否损坏的块和丢失的文件。
使用VALIDATE命令确认所有数据库文件存在,在正确位置,并且没有物理损坏。 CHECK LOGICAL选项还检查逻辑块损坏。
例如,输入以下命令,以验证所有数据库文件和存档的重做日志文件是否存在物理和逻辑损坏:
BACKUP VALIDATE CHECK LOGICAL DATABASE ARCHIVELOG ALL;
您也可以使用VALIDATE命令来检查各个数据块,如下示例所示:
VALIDATE DATAFILE 4 BLOCK 10 TO 13;
您还可以验证备份集,如下示例所示:
VALIDATE BACKUPSET 3;
您可以按主键指定备份集,这显示在LIST BACKUP命令的输出中。
4.7、使用RMAN脚本
RMAN支持使用命令文件来管理重复出现的任务,如每周备份。
命令文件是一个包含RMAN命令的客户端文本文件,与您在RMAN提示符下输入的命令完全相同。
您可以使用任何文件扩展名。存储的脚本是命令文件的替代方案,该命令文件允许脚本可用于可以连接到目标数据库及其恢复目录的任何RMAN客户端。
创建和运行命令文件:
1.使用文本编辑器来创建命令文件。例如,创建一个包含以下内容的命令文件:
# my_command_file.txt CONNECT TARGET / BACKUP DATABASE PLUS ARCHIVELOG; LIST BACKUP; EXIT;
启动RMAN,然后通过在RMAN提示符下运行@命令来执行命令文件的内容:
% rman @/my_dir/my_command_file.txt # runs specified command file
您还可以使用一个要运行的命令文件来启动RMAN,如下图所示:
% rman @/my_dir/my_command_file.txt
RMAN可以使用存储在RMAN存储库中的信息来生成有关备份活动的报告。
使用RMAN的LIST和REPORT命令来报告备份操作。使用SHOW ALL命令来显示当前的RMAN配置。此外,RMAN还提供了一组全面的视图。
5.1 显示备份
LIST BACKUP和LIST COPY命令显示了存储库中列出的有关备份和数据文件副本的信息。
对于备份,您可以使用以下选项来控制LIST输出的格式。
按备份集组织输出。这是默认的表示模式。
示例
LIST BACKUP OF DATABASE BY BACKUP
根据已备份的文件列出备份。
示例
LIST BACKUP BY FILE
显示汇总输出。
示例
LIST BACKUP BY FILE
对于备份和副本,您可以使用以下所示的额外选项。
列出在RMAN存储库中记录的备份,但在上一次CROSSCHECK检查命令中,未在磁盘或磁带上的预期位置上出现的备份。过期的备份可能已被操作系统实用程序删除。
示例
LIST EXPIRED COPY
列出在RMAN存储库中具有可用状态且可以恢复和恢复的数据文件备份或副本。
示例
LIST BACKUP RECOVERABLE
要列出备份和副本:
1.启动RMAN并连接到目标数据库。
2.在RMAN提示符下运行LIST命令。您可以显示特定的对象,如下示例所示:
LIST BACKUP OF DATABASE; LIST COPY OF DATAFILE 1, 2; LIST BACKUP OF ARCHIVELOG FROM SEQUENCE 10; LIST BACKUPSET OF DATAFILE 1;
5.2 数据文件和备份报告
报表命令比LIST命令执行更复杂的报告分析。
以下显示了报表命令的一些主要选项。
显示在当前的保留策略下需要备份哪些文件。使用可选的REDUNDANCY和RECOVERY WINDOW参数来指定不同的条件。
示例
REPORT NEED BACKUP DATABASE
REPORT NEED BACKUP DATABASE
REPORT SCHEMA
列出自该数据文件的上次备份以来,已经对该数据文件中的对象执行了不可恢复操作的所有数据文件
REPORT UNRECOVERABLE
生成有关数据库文件和备份的报告:
1.启动RMAN并连接到目标数据库。
2.在RMAN提示符下运行报表命令。以下示例报告根据当前配置的备份保留策略已过时的备份:
REPORT OBSOLETE;
以下示例报告了数据库中的数据文件和临时文件:
REPORT SCHEMA;
RMAN存储库元数据始终存储在目标数据库的控制文件中。RMAN维护命令在管理备份时会使用此元数据。
6.1 交叉检查备份
使用CROSSCHECK命令可以将RMAN备份和复制的逻辑记录与存储介质上的文件同步。
如果备份在磁盘上,则CROSSCHECK确定文件的头是否有效。如果备份在磁带上,则RMAN将在RMAN存储库中查询备份件的名称和位置。在删除备份和复制之前交叉检查。
交叉检查磁盘上的所有备份和拷贝:
1.启动RMAN并连接到目标数据库
2.运行交叉检查命令,如下示例所示:
CROSSCHECK BACKUP; CROSSCHECK COPY;
6.2 删除废弃备份
DELETE命令从磁盘和磁带中删除RMAN备份和复制,更新在控制文件存储库中删除的文件的状态,并从恢复目录中删除记录(如果使用目录)。
如果您以交互式方式运行RMAN,并且如果您没有指定NOPROMPT选项,则删除将显示一个文件列表,并在删除列表中的任何文件之前提示进行确认DELETE OBSOLETE命令特别有用,因为RMAN删除RMAN存储库中记录的不再需要的备份和数据文件副本。您可以使用DELETE命令上的选项来指定过时的内容或使用已配置的备份保留策略
删除过时的备份和副本,请执行以下操作:
1.启动RMAN并连接到目标数据库
2.运行已删除过时的命令,如下示例所示:
DELETE OBSOLETE;
数据恢复顾问是一个Oracle数据库工具,它提供了诊断持久性数据故障的基础设施,向用户提供修复选项,并根据用户的要求执行修复。
7.1 列出故障
故障是由运行状况监视器检测到的持续数据损坏。例如,包括物理和逻辑数据块损坏和丢失的数据文件。
每个故障都有一个故障优先级和故障状态。优先级可以是关键的、高的或低的。该状态可以是已打开的或“已关闭的。
您可以运行LIST FAILURE命令来显示所有已知的失败。如果存在故障,则在同一会话中运行通知故障命令,以确定修复选项。建议故障输出显示了手动和自动修复选项。首先,请尝试手动修复这个问题。如果无法手动修复此问题,则请查看自动修复部分。
自动修复选项描述了针对一个或多个故障的服务器管理的修复。如果可能,修复将被合并,以便一次修复可以修复多个故障。修复选项指示执行哪些修复,以及执行修复操作是否丢失数据。
列出故障和确定修复选项说明了列出故障和确定修复选项的命令。输出指示包含RMAN命令的修复脚本的文件名。如果您不希望使用数据恢复顾问来自动修复故障,那么您可以使用该脚本作为您自己的恢复策略的基础
示例 LIST FAILURE and ADVISE FAILURE
RMAN> LIST FAILURE; Database Role: PRIMARY List of Database Failures ========================= Failure ID Priority Status Time Detected Summary ---------- -------- --------- ------------- ------- 85 HIGH OPEN 19-SEP-23 One or more non-system datafiles need media recovery 62 HIGH OPEN 19-SEP-23 One or more non-system datafiles are missing RMAN> ADVISE FAILURE; Database Role: PRIMARY List of Database Failures ========================= Failure ID Priority Status Time Detected Summary ---------- -------- --------- ------------- ------- 85 HIGH OPEN 19-SEP-23 One or more non-system datafiles need media recovery 62 HIGH OPEN 19-SEP-23 One or more non-system datafiles are missing analyzing automatic repair options; this may take some time using channel ORA_DISK_1 analyzing automatic repair options complete Mandatory Manual Actions ======================== no manual actions available Optional Manual Actions ======================= 1. If you restored the wrong version of data file /u01/app/oracle/oradata/CDB19C/pdb1/users01.dbf, then replace it with the correct one 2. Automatic repairs may be available if you shutdown the database and restart it in mount mode 3. If file /u01/app/oracle/oradata/CDB19C/pdb1/users01.dbf was unintentionally renamed or moved, restore it Automated Repair Options ======================== Option Repair Description ------ ------------------ 1 Restore and recover datafile 12; Recover datafile 12 Strategy: The repair includes complete media recovery with no data loss Repair script: /u01/app/oracle/diag/rdbms/cdb19c/cdb19c/hm/reco_3643060532.hm
7.2 修复故障
使用RMAN修复故障命令来修复检测到的故障。
在RMAN会话中运行 REPAIR FAILURE并 ADVISE FAILURE后,您可以运行REPAIR FAILURE以执行修复选项。如果您在没有其他命令选项的情况下执行REPAIR FAILURE,那么RMAN将在当前会话中使用最新REPAIR FAILURE命令的第一个修复选项。或者,指定从最近的ADVISE FAILURE命令中获得的修复选项编号。下面的示例说明了如何修复示上述确定的故障。
RMAN> REPAIR FAILURE;
默认情况下, REPAIR FAILURE会在开始执行之前提示进行确认。在执行修复后,数据恢复顾问会重新评估所有现有的故障,以确定它们可能也已被修复。数据恢复顾问总是验证故障仍然相关,并自动关闭固定的故障。如果修复由于错误而无法完成,则该错误将触发对现有故障和修复的新评估和重新评估。
使用恢复和恢复命令进行RMAN恢复和恢复物理数据库文件。恢复数据文件是根据恢复操作的需要从备份中检索数据文件。介质恢复是应用从重做日志和增量备份到还原数据文件的更改,以将数据文件转发到所需的硫氰酸盐或时间点。
8.1 准备数据文件的还原与恢复
要因为媒体故障损坏数据库文件而恢复数据库,请首先确保有必要的备份。
你可以使用 RESTORE ... PREVIEW命令报告,但不恢复,备份可以RMAN使用恢复到指定的时间。RMAN查询元数据,但实际上并没有读取备份文件。在您运行此命令时,可以打开该数据库。
要预览数据库恢复和恢复,请执行以下操作:
1.启动RMAN并连接到目标数据库
2.可选地,列出当前的表空间和数据文件,如下命令所示:
RMAN> REPORT SCHEMA;
使用预览选项运行还原数据库命令。以下命令指定摘要,以便备份元数据不会以详细模式显示(包括示例输出):
RMAN> RESTORE DATABASE PREVIEW SUMMARY;
8.2 恢复数据库
使用还原数据库和恢复数据库命令来恢复整个数据库。您必须事先备份过所有需要的文件。此方案假设您可以将所有数据文件恢复到其原始位置。如果原始位置无法访问,则请使用SET NEWNAME命令。
要恢复整个数据库:
2.将数据库置于挂载状态。
下面的示例终止数据库实例(如果已启动)并装载数据库:
RMAN> RESTORE DATABASE PREVIEW SUMMARY;
3.恢复数据库。下面的示例使用预先配置的磁盘通道来还原数据库:
RMAN> RESTORE DATABASE;
4.恢复数据库,如下示例所示:
RMAN> RECOVER DATABASE;
5.打开数据库,如下示例所示:
RMAN> ALTER DATABASE OPEN;
8.3 恢复表空间
当打开数据库时,在单个表空间上使用恢复表空间和恢复表空间命令。在这种情况下,必须使需要恢复的表空间脱机,恢复,然后恢复表空间,并使恢复的表空间联机。
如果无法将数据文件恢复到其原始位置,则请在RUN块中使用RMAN SET NEWNAME命令来指定新的文件名和位置。然后,使用 SWITCH DATAFILE ALL命令更新控制文件,以反映在RUN命令中发出SET新名称的所有数据文件的新名称。
与用户管理的媒体恢复不同,您不需要将联机表空间置于备份模式中。RMAN不需要额外的日志记录或备份模式,因为它知道数据块的格式。
在数据库打开时恢复单个表空间到新的DBF中:
1.准备连接
2.使用要脱机恢复的表空间。下面的示例将使用户表空间脱机:
RMAN> ALTER TABLESPACE users OFFLINE;
3.注册到catalog中
cp /u01/app/oracle/oradata/CDB19C/pdb1/users01.dbf /u01/app/oracle/oradata/CDB19C/pdb1/users02.dbf RMAN> catalog datafilecopy '/u01/app/oracle/oradata/CDB19C/pdb1/users02.dbf'; 否则会报以下报错: RMAN-20230: datafile copy not found in the repository
4.恢复并恢复表空间。您可以在RMAN提示符下执行以下RUN命令,它将为用户表空间中的数据文件设置一个新的名称:
RUN { SET NEWNAME FOR DATAFILE '/u01/app/oracle/oradata/CDB19C/pdb1/users01.dbf' TO '/u01/app/oracle/oradata/CDB19C/pdb1/users02.dbf'; RESTORE TABLESPACE users; SWITCH DATAFILE ALL; # update control file with new file names RECOVER TABLESPACE users; }
5.使表空间在线,如下示例所示:
RMAN> ALTER TABLESPACE users ONLINE;
您还可以使用RESTORE DATAFILE和RECOVER DATAFILE来在数据文件级别进行恢复。
8.4 恢复单个块
RMAN可以恢复单个已损坏的数据文件块。
当RMAN对备份文件执行完整扫描时,V$DATABASE_BLOCK_CORRUPTION中列出任何损坏的块。损坏通常在警报日志、跟踪文件或SQL查询的结果中报告。
要恢复数据块:
1.启动RMAN并连接到目标数据库,如“启动RMAN并连接到数据库”中所述。
2.如果您没有此信息,请获取已损坏的块的块号。
RMAN> SELECT NAME, VALUE FROM V$DIAG_INFO;
3.运行恢复命令来修复这些块。下面的RMAN命令可以恢复所有损坏的块:
RMAN> RECOVER CORRUPTION LIST;
您还可以恢复各个块,如下示例所示:
RMAN> RECOVER DATAFILE 1 BLOCK 233, 235 DATAFILE 2 BLOCK 100 TO 200;