发出 Oracle Recovery Manager 命令
- 交互式客户机
- 在 RMAN 提示符下输入命令。
- 执行分析时或运行报告或存储脚本时使用。
- 示例
-
$ rman TARGET sys/sys_pwd@db1
RMAN> BACKUP DATABASE; - 批处理模式
- 与自动作业配合使用
- 启动 RMAN 时指定命令文件
- 指定日志文件名来捕获会话日志
- 示例
-
$ rman TARGET SYS/sys_pwd @prod1@'/oracle/backup_all_l0.rcv'
- 管道接口
- 指定 PIPE 命令行参数
- 用于在会话之间或在 RMAN 与外部应用程序之间通信数据。
- 示例
-
% rman PIPE abc TARGET SYS/pwd@trgt
- 一个是 ORA$RMAN_ABC_IN,RMAN 使用它接收用户命令
- 一个是ORA$RMAN_ABC_OUT,RMAN 使用它将所有输出发送回 RMAN
- 输入和输出管道中的所有消息都是VARCHAR2 类型
RMAN 命令
- 类型
- 独立命令
- 在 RMAN 提示符下单独执行
- 不能显示为 RUN 内的子命令
- 常见的有:CHANGE CONNECT CREATE CATALOG、RESYNC CATALOG CREATE SCRIPT、DELETE SCRIPT、REPLACE SCRIPT
- 作业命令
- 必须位于 RUN 命令的大括号内
- 以组的形式执行
- 顺序执行。如果块内的任一命令失败,RMAN 就会停止处理,不再执行块内的其它命令。但仍然保留所有已执行命令的结果,不会以任何形式撤消。
- 仅能作为作业命令运行的命令示例是 ALLOCATE CHANNEL
- 示例:
-
RMAN> RUN {
2> BACKUP AS BACKUPSET
3> FORMAT '/u01/db01/backup/%d_%s_%p'
4> DURATION 10:00 MINIMIZE LOAD
5> (DATABASE);
6> SQL 'alter system archive log current';
7> } - 概览
- BACKUP用于备份数据库、表空间、数据文件(当前或副本)、控制文件(当前或副本)、SPFILE、归档日志或者目标数据库或备用数据库的备份集。
- DUPLICATE 用于从目标数据库的备份(备份集或映像副本)处创建克隆数据库或备用数据库
- FLASHBACK 用于执行闪回数据库操作
- RECOVER 用于从备份或映像副本恢复文件,RESTORE 用于从备份或映像副本还原文件
- LIST 用于查询恢复目录或控制文件,并生成记录了备份、副本、归档重做日志以及数据库原型的列表
- REPORT用于执行对恢复目录或控制文件的详细分析
- CROSSCHECK 检查磁盘或磁带上备份或副本的状态。
- DELETE列出指定的备份对象并提示您确认是否删除它们。
- CHANGE变更资料档案库中备份对象的状态。
- LIST 显示运行 CROSSCHECK/DELETE EXPIRED 命令时将处理的内容。
BACKUP命令
- 用法
- 执行备份的类型
- FULL 备份:可以执行整个数据库的备份,以在文件中包含所有使用的数据块
- INCREMENTAL:增量备份
- 启用了 CONFIGURE CONTROLFILE AUTOBACKUP:RMAN 会在BACKUP 命令后自动备份控制文件和当前服务器参数文件
- 备份的内容:DATABASE、DATAFILE、TABLESPACE、ARCHIVELOG、CURRENT CONTROLFILE 或 SPFILE
- 创建映像副本 (AS COPY) 还是创建备份集 (AS BACKUPSET)
- 备份片段的文件名格式和位置(FORMAT)
- 应从备份集中排除哪些数据文件或归档重做日志(SKIP)
- 备份集大小的最大值(MAXSETSIZE)
- 成功创建了备份集时应删除输入文件 (DELETE INPUT)
- 示例:
-
RMAN> BACKUP AS BACKUPSET
2> FORMAT '/BACKUP/df_%d_%s_%p.bus'
3> TABLESPACE hr_data; - 备份约束条件
- 数据库必须已装载或打开(如果使用恢复目录,则恢复目录数据库必须处于打开状态)
- 不能备份联机重做日志。
- 在 NOARCHIVELOG 模式下仅可使用“干净”备份(正常脱机”或“只读”表空间的备份)
- 在 ARCHIVELOG 模式下仅可使用“当前”数据文件备份
- 并行备份集
- 通过将 CONFIGURE 命令的 PARALLELISM 选项设置为大于 1 的值,或通过手动分配多个通道,来配置并行备份
- 示例
-
RMAN> RUN {
2> ALLOCATE CHANNEL c1 DEVICE TYPE sbt;
3> ALLOCATE CHANNEL c2 DEVICE TYPE sbt;
4> ALLOCATE CHANNEL c3 DEVICE TYPE sbt;
5> BACKUP
6> INCREMENTAL LEVEL = 0
7> (DATAFILE 1,4,5 CHANNEL c1)
8> (DATAFILE 2,3,9 CHANNEL c2)
9> (DATAFILE 6,7,8 CHANNEL c3);
10> ALTER SYSTEM ARCHIVE LOG CURRENT;
11> } - 压缩备份
- 压缩备份可减少存储备份集所需的空间
- 压缩功能仅适用于备份集,不适用于映像副本
- 默认情况下,压缩功能被禁用
- 示例
-
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 2
2> BACKUP TYPE TO COMPRESSED BACKUPSET; - 映像副本(backup as copy或OS命令)
- 映像副本只能写入磁盘。
- 如果文件存储在磁盘上,可以通过在 RMAN 中使用 SWITCH 命令来立即使用这些文件,该命令相当于 ALTER DATABASE RENAME FILE SQL 语句
- 在映像副本中,无论块中是否包含数据都会复制所有的块
- 因为文件副本始终包含所有块,所以映像副本为完全备份或级别为 0 的增量备份的一部分
- 示例
-
RMAN> BACKUP AS COPY
2> DATAFILE '/ORADATA/users_01_db01.dbf'
3> FORMAT '/BACKUP/users01.dbf'; - 备份和映像副本的标记:标记是分配给备份集或映像副本的逻辑名
- 好处
- 提供对文件副本的集合或备份集有用的引用
- 用于 LIST 命令以轻松找到备份文件
- 用于 RESTORE和 SWITCH命令
- 可以用于多个备份集或文件副本
- 示例:每周对数据文件 3 和4 执行一次完全备份。此备份的标记名称为week_full_backup。
-
RMAN> BACKUP TAG 'week_full_backup' DATAFILE 3,4;
- BACKUP 命令选项
- 扫描逻辑损坏和物理损坏。
- NOCHECKSUM选项禁止校验和操作
- CHECK LOGICAL 在物理没有损坏的情况下检测逻辑损坏
- VALIDATE 选项
- 对中止前所允许检测到的损坏数量设置阈值:MAXCORRUPT 参数
- 执行备份操作前验证目标输入文件。
- 对备份集进行双重备份
- 覆盖现有备份集或映像副本:指定 REUSE
- 将对存储设备与磁盘上数据文件之间数据传输的控制传递给介质管理层。
- 加密备份文件。
- 备份归档重做日志
- 联机重做日志文件切换是自动的
- 执行归档日志故障转移
- 可以指定要备份的归档重做日志的范围
- 归档重做日志文件的备份集不能包含任何其它类型的文件。
- 示例:
-
RMAN> BACKUP
2> FORMAT '/disk1/backup/ar_%t_%s_%p'
3> ARCHIVELOG FROM SEQUENCE=234
4> DELETE INPUT; - 数据库整体备份
- 数据库整体备份是所有数据文件和控制文件的副本。也可以选择包括 SPFILE 和归档日志文件。
- 前提
- CONFIGURE DEFAULT DEVICE TYPE TO disk;
- CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COPY;
- CONFIGURE CONTROLFILE AUTOBACKUP ON;
- 示例
-
RMAN> BACKUP DATABASE
PLUS ARCHIVELOG; -
RMAN> BACKUP COPY OF DATABASE; --备份前一个映像副本
- 默认情况下,RMAN 逐个执行每个 BACKUP 命令。可采用以下方法并行执行复制操作
- 使用 CONFIGURE DEVICE TYPE DISK PARALLELISM n,其中 n是需要的并行度
- 分配多个通道
- 指定一个 BACKUP AS COPY命令并列出多个文件
- RMAN 备份类型
- 完全备份:完全备份不同于整体数据库备份。完全数据文件备份是包含文件中所有已用数据块的备份。RMAN 将所有块复制到备份集或映像副本中,仅跳过从未使用的数据文件块。
- 增量备份:增量备份是级别为 0 的备份,其中包含数据文件中除从未使用的块之外的所有块;或者是级别为 1 的备份,其中仅包含自上次备份以来更改过的那些块。级别为 0 的增量备份在物理上与完全备份完全一样。唯一区别是级别为 0 的备份可用作级别为1 的备份的基础,但完全备份不可用作级别为 1 的备份的基础。
- INCREMENTAL LEVEL = [0 | 1]
- 差异:增量备份的默认类型,其备份自最近一次级别为1 的或级别为 0 的增量备份后更改的所有块
- 累积:备份自最近一次级别为0 的备份后更改的所有块
- 差异增量备份较快,写出的块较少,生成的备份文件也较小。这就使得备份过程较快,但是在恢复过程中,RMAN 必须检索每个增量备份并进行应用。
- 累积增量备份花费的时间可能会较长,写出的块较多,生成备份文件也较大。累积备份用于提高恢复速度,因为恢复时必定应用的备份较少。
块更改跟踪
- 概述
- 在更改跟踪文件中记录更改的块
- 由 RMAN 自动使用(如果启用此选项)
- 通过避免备份过程中的完全数据文件扫描来优化增量备份
- 启用更改跟踪后,第一个级别为 0 的增量备份仍须扫描整个数据文件,因为更改跟踪文件尚未反映块的状态。对于后续增量备份,RMAN 将使用更改跟踪数据来确定增量备份过程中要读取的块,无需读取整个数据文件,从而提高了性能。
- 启用块更改跟踪
- EM:维护-->备份设置--策略
- SQL*PLUS:
-
SQL> ALTER DATABASE ENABLE
2> BLOCK CHANGE TRACKING
3> USING FILE '/mydir/rman_change_track.f'
4> REUSE; --手动配置增量备份
select * from v$block_change_tracking
增量更新备份
- 使用 BACKUP命令的 BACKUP INCREMENTAL LEVEL 1...FOR RECOVER OF COPY WITH TAG ...表单创建可以增量更新的增量备份。如果级别为 0 的增量备份不存在,则执行此命令会创建具有指定标记的级别为 0 的备份。
- 使用 BACKUP命令的 RECOVER COPY ...WITH TAG ...表单将任何增量备份应用到具有相同标记的数据文件副本集。如果没有增量备份或数据文件副本,该命令会生成一条消息,但不生成错误。
LIST
- 要使用 LIST 命令,必须连接到目标数据库。如果在 NOCATALOG 模式下连接,则必须装载目标数据库。如果使用恢复目录连接,则必须启动目标实例,但不需要装载。
- 可以控制输出的组织方式(BY BACKUP 或 BY FILE)以及输出的详细程度(VERBOSE或 SUMMARY)。
- 示例
-
RMAN> LIST BACKUP OF DATABASE;
-
RMAN> LIST BACKUP OF DATAFILE
2> "/db01/ORADATA/u03/users01.dbf"; -
RMAN> LIST COPY OF TABLESPACE "SYSTEM";
REPORT 命令:生成资料档案库的详细分析
- 数据库的结构
- RMAN> REPORT SCHEMA;
- 哪些文件需要备份?
- REPORT NEED BACKUP
- 列出需要备份的所有数据文件
- 假设还原过程中使用最新的备份
- 提供四个选项
- 增量:需输入一个整数,用于指定恢复过程中应还原的增量备份的最大数目。
- 天数:需输入一个整数,用于指定自上次文件的完全备份或增量备份以来的最大天数。
- 冗余:需输入一个整数,用于指定视为必需的最低冗余级别。
- 恢复窗口:一个时间窗口,RMAN 应能在该窗口中恢复数据库
- 如果未指定选项则使用当前保留策略配置
- 示例
- 需要三个以上增量备份以进行恢复的文件
-
RMAN> REPORT NEED BACKUP incremental 3;
- 三天以来尚未进行备份的文件
-
RMAN> REPORT NEED BACKUP days 3;
- 如果不具有两个或更多个备份则需要进行备份
-
RMAN> REPORT NEED BACKUP redundancy 2;
- 需要进行备份以恢复到三天前的数据状态
-
RMAN> REPORT NEED BACKUP
2> recovery window of 3 days; - 哪些备份可以删除(即,已作废)?
- 查找根据当前保留策略设置应视为作废的所有恢复文件
-
RMAN> REPORT OBSOLETE;
- 如果需要的备份副本不多于两个,列出作废的恢复文件
-
RMAN> REPORT OBSOLETE REDUNDANCY 2;
- 删除备份集键为 4 的备份集
-
RMAN> DELETE BACKUPSET 4;
- 删除由于已存在两个以上的备份而视为作废的恢复文件
-
RMAN> DELETE OBSOLETE REDUNDANCY 2;
- 哪些文件因不可恢复的操作而无法恢复?
- RMAN> REPORT UNRECOVERABLE ...;
RMAN 动态视图
- V$ARCHIVED_LOG 显示数据库中已经创建、备份以及清除的档案。
- V$BACKUP_CORRUPTION 显示对备份集进行备份的过程中所发现损坏的块。
- V$BACKUP_DATAFILE 对于通过确定每个数据文件中的块数来创建同等大小的备份集非常有用。它还可以帮助您查明数据文件中损坏块的数目。
- V$BACKUP_DEVICE 显示有关所支持备份设备的信息。此视图不返回特殊设备类型DISK,因为该设备始终可用。
- V$BACKUP_FILES 显示有关所有 RMAN 备份(映像副本和备份集)和归档日志的信息。此视图模拟LIST BACKUP 和 LIST COPY RMAN 命令。
- V$BACKUP_PIECE 显示为备份集创建的备份片段。
- V$BACKUP_REDOLOG 显示备份集中存储的归档日志。
- V$BACKUP_SET 显示已经创建的备份集。
- V$BACKUP_SPFILE 显示有关备份集中服务器参数文件的信息。
- V$COPY_CORRUPTION 显示创建映像副本过程中所发现损坏的块
- V$DATABASE_BLOCK_CORRUPTION 列出最近一次 RMAN 备份过程中标记为损坏的数据库块。
- V$RMAN_CONFIGURATION 列出有关 RMAN 永久性配置设置的信息。
监视 RMAN 备份
- 启动 Oracle Recovery Manager 并连接到目标数据库,以及恢复目录(可选)。
- 分配通道后设置 COMMAND ID参数,然后复制所需的对象。由SET COMMAND ID命令指定的字符串将输入到所有已分配通道的 V$SESSION.CLIENT_INFO 列中。
run {
allocate channel t1 type disk;
set command id to 'rman';
backup datafile 1;
release channel t1;}
- 查询 V$PROCESS和 V$SESSION 视图,以便针对使用先前指定 COMMAND ID字符串的通道,获取其会话标识符 (SID) 和操作系统进程标识符 (SPID)。
SELECT sid, spid, client_info
FROM v$process p, v$session s
WHERE p.addr = s.paddr
AND client_info LIKE '%id=rman%';
- 查询 V$SESSION_LONGOPS 视图以获取副本的状态。
SELECT sid, serial#, context, sofar, totalwork,
round(sofar/totalwork*100,2) "% Complete"
FROM V$SESSION_LONGOPS
WHERE opname LIKE 'RMAN:%'
AND opname NOT LIKE 'RMAN: aggregate%'
AND totalwork != 0;
- 如果使用类型为 sbt 的通道且复制进程看起来处于挂起状态,则使用在步骤 3 中获取的SID 查询 V$SESSION_WAIT,以确定RMAN 是否在等待介质管理器函数调用完成。
SELECT * FROM V$SESSION_WAIT WHERE event LIKE '%sbt%';