扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

DBA | 告别数据泵!Oracle 推荐的物理备份神器 RMAN 快速入门指南

2025/11/06
1310
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 ,若此文对你有帮助,一定记得倒点个关注⭐与小红星❤️,收藏学习不迷路  。

由于文章篇幅过长原因,我将《DBA | Oracle 容灾备份神器 RMAN 工具介绍与实践指南》其分为上、下两篇,其中上篇为RMAN 快速入门介绍,下篇为 RMAN 备份恢复实践。

温馨提示:若文章代码块中存在乱码或不能复制,请联系作者,也可通过文末的阅读原文链接,加入知识星球中阅读,原文链接:https://articles.zsxq.com/id_0awq896cbww1.html

01 使用物理备份 RMAN 工具恢复性测试

Oracle数据库作为企业级数据库系统,其稳定性和可靠性至关重要,特别是在生产环境中业务数据的重要性不言而喻,所以突显出数据库容灾备份的重要性,在 Oracle 数据库的故障应对与恢复是一个复杂而重要的过程。上一章《DBA | Oracle 数据备份迁移之数据泵 expdp/impdp 工具实战指南》,作者带领各位看友一起实践了逻辑备份使用数据泵(expdp/impdp)进行 Oracle 数据库的备份恢复,并介绍了其相关高级用法,相比大家都有所收获吧!

在本章中,我们将一起探索 Oracle 官方推荐的物理备份工具 RMAN (Recovery Manager) 的高级备份与恢复功能,作者从 ORACLE 核心概念、RMAN 相关知识,以及 RMAN 备份恢复实践等多个方面,带领大家一步步深入了解 RMAN 的强大功能。希望通过本章节的学习,能够帮助新手DBA 更好地掌握 Oracle 数据库的备份与恢复技术,提升您的数据库容灾管理能力。

Ok,话不多说,在学习实践 RMAN 之前,先跟作者一起回顾一下 Oracle 数据库相关知识吧。

1.前置知识回顾

Oracle 数据库是由甲骨文公司开发的一款功能强大、可靠性高且安全性好的关系数据库管理系统,它提供了强大的数据管理功能。理解Oracle数据库的基本概念以及数据备份分类类别、方式,对于学习备份和恢复至关重要。

温馨提示:若各位看友对 Oracle 还不太熟悉,建议先阅读《Oracle 筑基篇》专栏里相关文章,这将有助于您更好地理解后续内容。

核心概念

数据库 (Database) vs 实例 (Instance):

数据库:是物理文件的集合,包括数据文件、控制文件、重做日志文件等;它是静态的。

实例:是内存结构和后台进程的集合;它是动态的,是数据库运行在操作系统上的一个载体。一个实例在其生命周期内只能挂载和打开一个数据库,但在RAC(集群)环境中,多个实例可以同时挂载一个数据库。

简单比喻:数据库就像一套房子(数据文件是家具),实例就是住在房子里的一家人(内存是活动空间,进程是家庭成员)。必须先有房子(数据库),然后家人(实例)才能住进去生活。

关键进程 (Background Processes):

PMON (进程监控进程):负责清理失败的用户进程。

SMON (系统监控进程):负责实例恢复、清理临时段等系统级管理。

DBWn (数据库写进程):负责将缓冲区缓存中的“脏数据”写入数据文件。

LGWR (日志写进程):负责将日志缓冲区中的重做记录写入在线重做日志文件。它是最关键的进程之一,它决定了事务的提交。

关键内存结构 (Memory Structures):

数据库缓冲区缓存:缓存从数据文件读出的数据块。

共享池:缓存SQL语句的执行计划、数据字典信息等。

重做日志缓冲区:缓存重做记录。

SGA (系统全局区):所有服务器进程和后台进程共享的内存区域。包含:

PGA (程序全局区):每个服务器进程私有的内存区域。

关键文件 (Critical Files):

参数文件:spfile(服务器参数文件,推荐)或 pfile(初始化参数文件),定义了实例启动时的参数配置。

控制文件:数据库的“蓝图”,记录了数据库的物理结构。必须多路复用!

在线重做日志文件:即归档文件,记录所有对数据库的更改,用于数据恢复。必须多路复用!

数据文件:实际存储表空间、索引等数据的地方。

备份分类

按系统准备状态分为:冷备份、热备份

      • 冷备份:是需停机操作。热备份:是在线操作,若业务需要

7 * 24

      •  小时不间断运行,则推荐使用热备份。

按数据类型分为:逻辑备份、物理备份

      • 逻辑备份:是基于 SQL 语句的导出导入,例如: exp、expdp 备份工具;物理备份:是直接拷贝数据库文件,例如:RMAN 备份工具,以及在操作系统层面由用户管理的备份(

alter tablespace XX begin backup+OS拷贝

      • ) 。

按备份粒度分为:全库备份、增量备份、差异备份和累积备份。

      • 全库备份:包含所有参数文件、数据文件、控制文件和归档日志。增量备份:只包含自上次全库或增量备份以来发生更改的数据。差异备份:只包含自上次全库或增量备份以来发生更改的数据,但不包括增量备份期间发生的更改。累积备份:实际上是增量备份的累积,即从最后一次全库或增量备份以来所有更改的数据。

按备份方式分为(Oracle 独有):镜像副本备份、备份集备份

镜像(映像)备份:镜像副本 (Image Copies) ,使用 backup as copy 命令,由于其备份文件和实际文件大小一样,所以在备份时需要额外的磁盘空间,另外它可直接被数据库识别和使用,其主要用途是快速恢复(如 SWITCH 命令直接替换数据文件),但是通常情况下不会使用此方式。

备份集备份:备份集 (Backup Sets) ,使用 backup as backset 命令,由于其备份文件远远小于实际文件大小,空块不会备份,在备份时更节省磁盘空间,这也是 RMAN专有格式,由一个或多个"备份片"组成 ,所以必须通过RMAN工具才能识别和访问 ,其主要用途是用于常规的备份与恢复操作。

2.RMAN 快速介绍

RMAN 是什么?

RMAN(Recovery Manager)是 Oracle 8i 开始推荐的数据备份和恢复工具, 它采用了物理备份的方式,用于集备份(backup)、还原(restore)和恢复(recover)数据库于一体的 Oracle 工具,不仅可以备份单实例还可以在RAC模式下备份整个集群的数据库,是目前 Oracle 数据库管理中不可或缺的工具,DBA可通过命令行界面或图形用户界面(如 Oracle Enterprise Manager, OEM, 注: 高版本已被阉割)进行操作,另外,一些第三方备份软件也是通过 RMAN 进行备份和恢复的。

RMAN 有何特点?

高效性:支持在开启归档模式下,在数据库不停机进行热备份,支持并行处理备份和恢复操作,提高效率;

一致性:备份期间会默认检查数据库是否损坏,确保数据库在恢复后保持事务一致性。

全面备份:支持全库备份、增量备份(差异、累积)、表空间备份、数据文件备份、归档日志备份和控制文件备份。

多种级别恢复:提供全库恢复、表空间恢复、数据文件恢复、时间点恢复和SCN恢复等功能。

自动管理:支持通过定时任务,自定义配置 RMAN 脚本自动执行备份,支持增量备份、压缩备份、加密备份等高级功能。

RMAN 备份原理?

RMAN 备份架构图如下所示:

weiyigeek.top-RMAN 备份架构图

由图可知,RMAN客户端、目标数据库、RMAN 资料库以及服务器进程、RMAN 通道(Channel) 等关键部分组成,其中:

    RMAN 客户端:是用户与备份恢复系统交互的界面,通过执行RMAN命令来启动备份、恢复等操作。目标数据库:是被备份或恢复的 Oracle 数据库实例。RMAN 资料库: 是 RMAN 用来存储备份信息(如备份集的元数据)的地方,它是一个特殊的表空间。RMAN 服务器进程:是 RMAN 用来与目标数据库交互的后台进程,负责执行备份和恢复操作,其将在连接到目标数据库,以及分配新通道时产生一个服务进程。RMAN 通道:一个通道就是 RMAN 与目标数据库之间的一个连接,它可用用于限制系统资源(并行度)、IO带宽、备份片大小,以及当前打开文件限制(Limit Maxopenfiles)。Catelog 恢复目录:是可选的独立数据库,用于集中存储多个目标数据库的RMAN备份元数据。

另外,RMAN 为了减少备份文件的大小和传输时间采用多种压缩方法,其压缩原理主要基于对数据块(block)的过滤和重新编码。在备份过程中,RMAN 会扫描数据库的数据文件,并将数据块读取到内存中。然后,根据所选的压缩方法,RMAN 会对这些数据块进行处理,以减小它们的大小,RMAN针对不同版本提供了不同压缩算法。

Null Compression(空值压缩)

    • :缺省,适用于 Oracle 10.1 及其之前的版本。当RMAN扫描数据块进行备份时,它会跳过(过滤掉)那些块头为空(即从未使用过的)的数据块。此种方法不会备份已分配但未被格式化的块,从而减小备份文件的大小。

Unused Block Compression(未使用块压缩)

    • :适用于 Oracle 10.2 及其之后的版本。该压缩方法会跳过那些当前不包含数据的块,即使这些块之前被使用过(被格式化过),通过跳过这些不用于存储数据的块,RMAN可以创建更紧凑的数据文件备份。

Binary Compression(二进制压缩)

    :它在备份的块级别进行。与空值压缩和未使用块压缩不同,二进制压缩会对读取到内存中的数据块进行重新编码,以减小它们的大小,此种压缩方法通常可以进一步减小备份文件的大小,但会增加CPU和内存的使用量。

在 Oracle 12C 中提供了四种压缩等级:BASIC/LOW、MEDIUM、HIGH,简单了解后续会实践。

RMAN 备份类型

RMAN 的两种备份形式,即镜像(映像)与备份集是,下面让我们来看看其区别:

镜像(映像)备份:你可以把它理解成对数据文件、控制文件或归档日志等文件进行的“原样复制”。就像你用操作系统命令直接复制一份文件一样,生成的文件结构和内容和原始文件完全一致。正因为如此,它可以被操作系统命令识别(尽管不推荐直接用操作系统命令管理),并且在恢复时,RMAN可以直接用它来替换损坏的文件,非常高效,在 RMAN 中使用 LIST COPY 命令查看。

备份集备份:它是 RMAN 特有的逻辑备份格式。一个备份集是一个逻辑单位,它在物理上由一个或多个称为"备份片"的操作系统文件组成 。RMAN在创建备份集时,会跳过从未使用过的数据块,并且可以对备份进行压缩和加密,所以通常比镜像副本更节省空间。但是,你必须通过RMAN才能读取和恢复其中的内容,在 RMAN 中使用 LIST BACKUP 命令查看。

了解这两者的区别,能帮助你在不同场景下选择合适的备份策略和恢复手段。例如,对于关键文件的快速恢复,镜像副本很有用;而对于节省存储空间的长期归档备份,备份集通常是更好的选择。

 

另外,一个备份集可以由一个活多个备份片组成,在设置备份文件冗余度或出现备份片有大小限制时,便会有一个备份集对应多个备份片情况。

备份集(Backup Sets):逻辑概念,用于为一个或多个数据文件、控制文件、服务器参数文件和归档重做日志文件的备份,每个备份集由一个或多个二进制文件组成,每个二进制文件称为备份片,由此构成一个完全备份或增量备份。

备份片(Backup Pieces):物理概念,每个逻辑备份集包含一个或多个物理备份件,简单来说备份片就是备份后生成的一个个物理文件,一个备份片里面可能包含一个或多个 datafile,另外备份片是以专有格式编写的,只能由 RMAN 工具进行创建或恢复。

-- # 一对一情况
RMAN> backup database format'/backup/rman/%U';

-- # 一对多情况
RMAN> CONFIGURE MAXSETSIZE clear;
RMAN> run {
  allocate channel c1 device type disk maxpiecesize 1000M;
  backup database format'/home/oracle/2data%U';
}

-- # 查看备份集和备份片信息
select * from v$backup_set;
select * from v$backup_piece;

 

此外,RMAN 还有0级、一级、二级备份 以及 CUMULATIVE(累积)与DIFFERENTIAL(差异)增量备份等相关概念,这里简单解释一下,防止各位看友在后续学习实践时一脸茫然。

0 级增量备份(基石):它是所有增量备份的基础,它会备份所有被使用过的数据块,无论这个块自从上次备份后是否被修改过,命令:BACKUP INCREMENTAL LEVEL 0 DATABASE;,通常是每周一次。

1 级增量备份(里程碑):它是基于0级备份(或上一个1级备份)的累积性备份,它会备份自上一次0级或1级备份以来所有发生变化的数据块,命令:BACKUP INCREMENTAL LEVEL 1 DATABASE;,通常是每天或每两天一次。

2 级增量备份(轻量快照):它是基于0级或1级备份的差异备份,它会备份自上一次1级或0级备份以来所有发生变化的数据块,命令:BACKUP INCREMENTAL LEVEL 2 DATABASE;,通常是每几小时一次。

为了直观地理解这三者之间的关系,我们可以通过以下策略流程图来展示一个经典的每周备份方案:

weiyigeek.top-0~2级增量备份流程策略图

DIFFERENTIAL(差异,默认):每个备份只与最近一次同级或更低级别的备份比较,它只备份“上一次以来的变化”, 适用于存储空间有限,接受恢复时间稍长的场景,完整命令:BACKUP INCREMENTAL LEVEL 1 DIFFERENTIAL DATABASE; 其中 DIFFERENTIAL 为缺省值,可以不写。

CUMULATIVE(累积):每个备份都直接与最近的0级备份比较,它备份“自基准点以来的所有变化”, 适用于存储空间较为富足,且对灾难恢复时的速度有要求的场景,完整命令:BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;

优缺点分析?

特性 差异增量备份 累积增量备份
优点 备份集体积小,备份速度快,对系统资源和存储空间占用少。 恢复速度快,恢复时只需要最新的0级备份和最近的一份累积备份。
缺点 恢复时可能需要多个备份集。如果周日的0级备份丢失,虽周一的1级差异备份存在,但周二及之后的差异备份都将失效。 备份集体积增长快,每次备份都包含自0级以来的所有变更,备份时间长,占用存储多。

如何抉择 差异 与 累积?

实际上是在 日常备份效率 和 灾难恢复速度 之间做权衡。事实上 Oracle 默认的 DIFFERENTIAL 策略已经足够,因为它提供了最佳的总体平衡;但是对于那些对恢复时间有严格要求的生产环境,CUMULATIVE 累积增量备份通过牺牲日常备份的效率和存储空间,换取了灾难恢复时的速度和操作简便性。

RMAN 使用场景

全量备份:对数据库进行完整的备份,包括所有参数文件、控制文件、数据文件、撤销表空间和归档文件等。

增量备份:只备份自上次备份以来发生变化的数据块和日志,节省存储空间和备份时间。

恢复操作:在数据库发生故障或数据丢失时,通过备份文件恢复数据库到特定时间点或备份点。

数据库克隆:创建数据库的一个副本,用于测试、迁移或灾难恢复。

特别注意:不支持以下文件备份,需自行通过逻辑备份和手工备份方式进行备份:

口令文件
在线日志(redo)
网络配置文件
告警文件(alert日志)、跟踪文件 /u01/app/oracle/diag/rdbms/orcl/orcl/trace
闪回日志
临时数据文件,临时表空间等

3.RMAN 快速入门

本小节作者将在 Windows Server 2019 操作系统 与 Oracle 12c 环境下,使用 RMAN 进行 Oracle 数据库的备份恢复操作相关操作,考虑到大家的操作系统环境不同,实际操作略有差异,还请各位看友根据自身情况灵活调整。

备份规划

    全量备份 每周一次 保留4周 包含所有数据文件增量备份 每天一次 保留2周 级别1增量备份归档日志 每小时 保留7天 确保恢复点连续性控制文件 每次备份 随备份保留 自动备份

对于备份存储,通常有以下几种方式:

    主备份存储,通常使用SAN/NAS/NFS/本地磁盘存储。异地备份,通常使用磁带或云存储方法存储。

前置要求

要求1.开启数据库归档模式,特别注意:在生产环境中执行此操作将会停止数据库对外服务,请务必在维护窗口期内执行。

-- 1.检查当前实例名称、状态、版本
SQL> select instance_name,status,version from v$instance;
-- INSTANCE_NAME    STATUS       VERSION
-- bkhistdb         OPEN         12.2.0.1.0

-- 检查当前模式
SELECT log_mode FROM v$database;
-- LOG_MODE
-- NOARCHIVELOG # 表示数据库日志模式为非存档模式

-- 切换到归档模式
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

-- 再次检查当前模式,会发行变更为 ARCHIVELOG
SELECT log_mode FROM v$database;
-- LOG_MODE
-- ARCHIVELOG

-- 查看归档日志路径(缺省)
SQL> SHOW PARAMETER db_recovery_file_dest;
-- NAME                                 TYPE        VALUE
-- ------------------------------------ ----------- ------------------------------
-- db_recovery_file_dest                string      C:apporaclerecovery_area
-- db_recovery_file_dest_size           big integer 9546M

-- 配置自定义归档路径
-- # Linux 
mkdir -p /u01/archivelog
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/archivelog' SCOPE=BOTH;
-- # Windows
mkdir C:oraclearchivelog
ALTER SYSTEM SET log_archive_dest_1='LOCATION=C:oraclearchivelog' SCOPE=BOTH;
--系统已更改。

-- 查看自定义归档路径及日志存档信息
SQL> SHOW PARAMETER log_archive_dest_1;

-- 设置完毕,手动切换日志,确保新目录中有归档日志产生。
SQL> ALTERSYSTEMSWITCHLOGFILE;
-- 日志切换 + 等待归档完成
SQL> ALTERSYSTEMARCHIVELOGCURRENT;
-- 当然也可以指定生成归档日志文件格式,但是需注意其需要重启实例,简单了解即可
SQL> ALTER SYSTEM SET log_archive_format='ARCH_%t_%s_%r_%d.arc' SCOPE=SPFILE;
-- 文件效果如下:
-- ARCH_1_13_1215525163_B66E7EA9.ARC

-- 通 v$archived_log 视图查看归档日志信息,也可以通过 archive log list 查看归档日志列表。
SQL> select sequence#,name,archived,applied from v$archived_log;
SQL> archivelog list;
-- 数据库日志模式          存档模式
-- 自动存档               启用
-- 存档终点               C:oraclearchivelog
-- 最早的联机日志序列     12
-- 下一个存档日志序列     14
-- 当前日志序列           14

weiyigeek.top-自定义归档日志图

特别注意:这里由于是测试环境只有一块 C 盘所以将归档日志放入 C 盘,但在生产环境中请勿将备份路径设置为系统盘,应为单独用于归档的数据盘,以免影响系统性能,以及数据安全性。

要求2.为 RMAN 备份恢复相关参数最佳实践。

control_file_record_keep_time

     动态参数:表名 RMAN 元数据在控制文件中保留的最小有效天数,超过设定值后不会过期立即覆盖只在可重用区装满时覆盖最旧的备份记录,根据作者经验建议设置为 30 天最为合适,当然根据自己环境的备份频率、归档日志产生量以及恢复流程的需求可以适当调整。
-- # 默认值:7 (天)
-- # 特殊值 0:如果设置为 0,表示禁用保留策略。
SQL> ALTER SYSTEM SET control_file_record_keep_time=30;
  -- 系统已更改。

SQL> show parameter control_file_record_keep_time
  -- NAME                                 TYPE        VALUE
  -- control_file_record_keep_time        integer     30

db_block_checking

     动态参数,开启块检查,其目标是尽早发现数据库中的坏块,性能占用少。
SQL> ALTER SYSTEM SET db_block_checking = false SCOPE=both;
SQL> show parameter db_block_checking;
  NAME                                 TYPE        VALUE
  db_block_checking                    string      FALSE

log_archive_dest_n

     动态参数,新增重做日志组和成员,并将归档日志存放多路径。
alter database add logfile member 'C:oracleREDO1b.LOG' to group 1

alter system set log_archive_dest_2='location=C:oraclearchivelog2' scope=both;
    增量备份时开启块更改跟踪,避免读取自上次备份以来未修改的数据所需信息。
alter database enable block change tracking using file 'C:oraclearchivelogch_tracking.trk' ;

要求3.为 RMAN 创建专门备份目录、脚本存储目录以及日志目录,建议此目录准备数据盘。

# Linux
## 创建备份目录结构
mkdir -p /u01/backup/{rman,scripts,logs}
chown -R oracle:oinstall /u01/backup
chmod -R 755 /u01/backup
## 添加到oracle用户profile
echo'export RMAN_BACKUP_DIR=/u01/backup' >> ~oracle/.bash_profile
echo'export DATE_FORMAT="+%Y%m%d_%H%M%S"' >> ~oracle/.bash_profile

# Windows
# 以管理员身份运行CMD
mkdir C:backuprman C:backupscripts C:backuplogs
# 设置权限,当前作者使用 oracle 用户运行的 Oracle 数据库。
icacls C:backup /grant oracle:F /T
# 设置环境变量
SETX /M RMAN_BACKUP_DIR "C:backup"
# 新开cmd 窗口,执行以下命令验证
echo %RMAN_BACKUP_DIR%
# C:backup

知识扩展:查看各个记录段的使用情况。

SQL> SELECT TYPE, RECORD_SIZE, RECORDS_TOTAL, RECORDS_USED
FROM V$CONTROLFILE_RECORD_SECTION
WHERE RECORDS_USED > 0;
-- TYPE                         RECORD_SIZE RECORDS_TOTAL RECORDS_USED
-- DATABASE                             316             1            1
-- REDO THREAD                          256             8            1
-- REDO LOG                              72            16            3
-- DATAFILE                             520           100           10
-- FILENAME                             524          2298           13
-- TABLESPACE                           180           100            7
-- TEMPORARY FILENAME                    56           100            2
-- LOG HISTORY                           56           292           10
-- ARCHIVED LOG                         584            28            8
-- BACKUP SET                            96           170            1
-- BACKUP PIECE                         780           209            1
-- BACKUP DATAFILE                      200           245            1
-- BACKUP SPFILE                        124           131            1
-- DATABASE INCARNATION                  56           292            2
-- RECOVERY DESTINATION                 180             1            1
-- INSTANCE SPACE RESERVATION            28          1055            1
-- RMAN STATUS                          116           141            3
-- THREAD INSTANCE NAME MAPPING          80             8            8
-- MTTR                                 100             8            1
-- STANDBY DATABASE MATRIX              400           128          128
-- ACM OPERATION                        104            64           10
RMAN 登录退出

描述:RMAN 可以通过命令行界面或图形用户界面(如Oracle Enterprise Manager)进行操作,通过已经随着 racle 数据库管理系统安装时就自带了 RMAN 工具,其程序所在 $ORACLE_HOME/bin 目录下,其执行文件为 rman,下述将简单实践登录和退出 RMAN 的操作。

操作流程

# 1.RMAN 直接连接本地数据库
## 方式1
C:UsersAdministrator>rman
恢复管理器: Release 12.2.0.1.0 - Production on 星期四 10月 30 11:22:16 2025
Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.
RMAN> connect target /
已连接到目标数据库: BKHISTDB (DBID=3060694697)  # 特别注意记录好 dbid 值,每个数据库都有一个唯一dbid

## 方式2
C:UsersAdministrator>rman target /

# 2.RMAN 直接连接远程数据库
rman target sys/WeiyiGeektop2025@192.168.88.162:1521/bkhistdb 
rman target '"sys/WeiyiGeektop2025@192.168.88.162:1521/bkhistdb as sysdba"'

# 3.使用 exit 或 quit 命令退出 RMAN。
RMAN> exit
RMAN> quit

weiyigeek.top-登录连接与退出 RMAN 图

RMAN 缺省设置

执行 show all 展示了当前RMAN的所有配置,是进行备份、恢复和制定备份策略的基础,也是知友们需要了解的RMAN基础知识。

RMAN> show all;

# 1.表示 RMAN 没有使用外部的恢复目录,而是使用目标数据库自身的控制文件来存储备份的元数据,不用着急后面我们会配置前面创建的恢复目录
使用目标数据库控制文件替代恢复目录 

db_unique_name 为 BKHISTDB 的数据库的 RMAN 配置参数为:

# 2.默认保留策略为冗余1,意味着RMAN只会保留最近一次成功的全备份集及其依赖的增量备份和归档日志
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; 

# 3.默认关闭备份优化
CONFIGURE BACKUP OPTIMIZATION OFF; 

# 4.默认的备份目的地为磁盘
CONFIGURE DEFAULT DEVICE TYPE TO DISK; 

# 5.默认开启控制文件自动备份,及其重要
CONFIGURE CONTROLFILE AUTOBACKUP ON; 

# 6.默认自动备份的控制文件的命名格式 %F 是一个变量,它会生成一个包含数据库ID、日期、序列号的唯一文件名
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; 

# 7.默认并行度为1,且备份类型为备份集
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; 

# 8.默认为数据文件备份在同一设备上创建一个副本数量
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; 

# 9.默认为归档日志文件备份在同一设备上创建一个副本数量
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; 

# 10.默认单个备份集的最大大小不受限制
CONFIGURE MAXSETSIZE TO UNLIMITED; 

# 11.默认数据库备份加密关闭
CONFIGURE ENCRYPTION FOR DATABASE OFF; 

# 12.默认数据库备份加密算法
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; 

# 13.默认使用 BASIC 压缩算法进行压缩,且优化加载
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; 

# 14.默认RMAN输出日志保留7天
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; 

# 15.默认归档日志删除策略为无,意味着RMAN在决定是否删除归档日志时不执行任何操作。
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; 

# 16.默认快照控制文件的路径
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:APPORACLEPRODUCT12.2.0DBHOME_1DATABASESNCFBKHISTDB.ORA'; 

 

另外,SHOW 命令中还支持它子命令用于单独查询相关参数值:

# 通道分配
SHOW CHANNEL;

# IO设备类型
SHOW DEVICE TYPE;

# 保存策略
SHOW RETENTION POLICY;

# 备份拷贝数目(多备份时)
SHOW DATAFILE BACKUP COPIES;

# 备份集大小的最大值
SHOW MAXSETSIZE;

# 不必备份的表空间
SHOW EXCLUDE;

# 备份优化
SHOW BACKUP OPTIMIZATION;

RMAN 配置参数详解

配置项 配置命令与状态 解释与含义 对运维的影响与建议
1. 恢复目录 使用目标数据库控制文件替代恢复目录 表示RMAN没有使用外部的恢复目录,而是使用目标数据库自身的控制文件来存储备份的元数据。 简单方便,但存在单点故障风险。如果控制文件全部丢失,恢复备份元数据会变得复杂。对于重要的生产库,建议使用独立的恢复目录数据库。
2. 保留策略 CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default 保留策略为冗余1。这意味着RMAN只会保留最近一次成功的全备份集及其依赖的增量备份和归档日志。更早的备份将被标记为OBSOLETE(过时)并可被删除。 高风险配置。如果最近的一次备份损坏,你将没有可用的备用备份进行恢复。生产环境强烈建议设置为 REDUNDANCY 2 或 RECOVERY WINDOW OF 7 DAYS(可恢复到7天内的任意时间点)。
3. 备份优化 CONFIGURE BACKUP OPTIMIZATION OFF; # default 备份优化关闭。如果开启 (ON),RMAN在备份归档日志或已备份的只读表空间时,会跳过那些与已备份文件完全相同的文件,从而节省空间和时间。 对于归档日志产生量大的系统,建议开启 (CONFIGURE BACKUP OPTIMIZATION ON;)。
4. 默认设备类型 CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default 默认的备份目的地为磁盘。 这是最常见的设置。备份到磁盘后,再通过其他手段将备份文件拷贝到磁带或异地。
5. 控制文件自动备份 CONFIGURE CONTROLFILE AUTOBACKUP ON; # default 控制文件自动备份开启。这是极其重要的配置。每当备份记录发生变化(如执行了备份、数据库结构改变等),RMAN都会自动备份控制文件和服务器参数文件。 最佳实践。必须保持开启。在控制文件全部丢失的情况下,这是恢复的救命稻草。
6. 控制文件自动备份格式 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT ... TO '%F'; # default 自动备份的控制文件的命名格式。%F 是一个变量,它会生成一个包含数据库ID、日期、序列号的唯一文件名。 默认格式即可,易于识别和管理。
7. 并行度与备份类型 CONFIGURE DEVICE TYPE DISK PARALLELISM 1 ...; # default 并行度为1,且备份类型为备份集。
- 并行度:同时用于备份操作的通道数量。1表示顺序备份。
- 备份集:RMAN的专有格式,只备份已使用的数据块,效率高。
- 并行度:对于大型数据库,增加并行度(如设置为CPU核心数)可以大幅提升备份速度。
- 备份集:是推荐类型。另一种是COPY(镜像拷贝),会备份整个数据文件块,占用空间大。
8. 备份副本数 CONFIGURE DATAFILE/ARCHIVELOG BACKUP COPIES ... TO 1; # default 为数据文件和归档日志备份在同一设备上创建的副本数量。这里都是1份。 为了提高本地冗余,可以考虑设置为2,这样每次备份都会在磁盘上生成两个完全相同的备份集。但这会占用双倍空间。
9. 备份集大小限制 CONFIGURE MAXSETSIZE TO UNLIMITED; # default 单个备份集的最大大小不受限制。 通常保持默认。如果存在文件系统大小限制(如FAT32),可以在这里设置。
10. 加密设置 CONFIGURE ENCRYPTION FOR DATABASE OFF; # default 数据库备份加密关闭。 安全风险。如果备份文件被窃取,数据可以直接被恢复出来。生产环境建议开启加密,并安全保管加密密钥。
11. 加密算法 CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default 如果开启加密,默认使用 AES128 算法。 AES256 更安全,但会略微增加CPU开销。
12. 压缩算法 CONFIGURE COMPRESSION ALGORITHM 'BASIC'; ... 使用 BASIC 压缩算法。这是Oracle免费提供的压缩方式。 可以有效减少备份集大小。如果需要更高压缩比,可以考虑Oracle高级压缩选项(如 LOWMEDIUMHIGH)。
13. RMAN输出保留 CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default RMAN命令行的输出日志(在V$RMAN_OUTPUT视图中)保留7天。 用于问题诊断,通常默认即可。
14. 归档日志删除策略 CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default 归档日志删除策略为NONE。这意味着RMAN在决定是否删除归档日志时,不会考虑其是否已被备份到其他目的地(如磁带)。 如果使用了闪回恢复区(FRA),并且归档日志在备份后已被标记为可删除,这个策略可以控制其何时从FRA中删除。
15. 快照控制文件位置 CONFIGURE SNAPSHOT CONTROLFILE NAME TO ... 指定了快照控制文件的路径。快照控制文件是RMAN在备份期间使用的控制文件的一个临时静止副本,用于保证备份的一致性。 默认位置即可,无需修改。

RMAN 常规参数配置

作者下面整理了各位新手朋友在首次使用 RMAN 工具进行 Oracle 数据容灾备份时需特别关注的 RMAN 参数配置项。

-- 连接到RMAN
RMAN TARGET /

-- 推荐配置参数
-- 1.配置冗余备份策略为2,确保至少有两个备份集可用。(冗余策略,最早版本将被废弃)
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
-- 2.开启备份优化,减少冗余数据块。
CONFIGURE BACKUP OPTIMIZATION ON;
-- 3.配置默认备份介质为磁盘,并设置并行度为4(开启四个通道),请根据服务器核心数调整。
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
-- 4.配置通道备份介质保存目录,并指定备份文件的命名格式。
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'c:/backup/rman/%U','d:/backup/rman/%U';
-- 5.开启控制文件自动备份,并设置其保存格式。
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'c:/backup/rman/CTR_%d_%F';
-- 6.配置备份介质保留期为7天 (时间策略)
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
-- 7.配置多个备份拷贝目录(可选但推荐)
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
-- 8.配置备份集大小限制(可选)
CONFIGURE MAXSETSIZE TO 100G;
-- 9.配置归档日志删除策略(可选)
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;

-- 除此之处,在 RMAN 脚本运行块中,还可手动指定通道分配,例如
RUN {
  ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT 'c:/backup/rman/%U';
  -- 其它参数
  rate = interger -- 读的速率限制
  maxpicecesize = integer -- 最大备份片段大小限制
  maxopenfiles = integer -- 最大打开文件数限制
}

-- 多通道并行备份
RUN {
  ALLOCATE CHANNEL ch1 DEVICE TYPE DISK RATE 100M;
  ALLOCATE CHANNEL ch2 DEVICE TYPE DISK RATE 100M;
  ALLOCATE CHANNEL ch3 DEVICE TYPE DISK RATE 100M;

  BACKUP DATABASE FILESPERSET 4;
}

weiyigeek.top-常规RMAN参数配置图

温馨提示:如果没有配置 CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT,则默认存放在db_recovery_file_dest 参数路径下,如果没有配置 db_recovery_file_dest 参数,则默认存放在$ORACLE_HOME/dbs 目录。

温馨提示:如果在 BACKUP 命令中没有指定 FORMAT 选项,则 RMAN 默认使用%U为备份片段命名,上述 FORMAT 字符串替代变量浅析,如 %U 代表备份(片)集的唯一标识符,而 %F 则用于生成控制文件的唯一文件名,其具体格式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 表示 DBID 值,YYYYMMDD 表示年月日的时间戳,QQ 表示 00 开头的十六进制数字序列(最大值为FF即256),此外还支持如下变量:

%c:备份片的拷贝数(从1开始编号)
%d:数据库名称
%D:位于该月中的天数(DD)
%M:位于该年中的月份(MM)
%F:基于 DBID 唯一名称,其格式为 c-IIIIIIIIII-YYYYMMDD-QQ
%n:数据库名称,并且会在右侧用 x 字符进行填充,使其保持长度为8
%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用 %u 可以为每个备份集生成一个唯一的名称
%U: 唯一的文件名,类似于 %u_%p_%c 组合
%p:表示备份集中备份片段的编号,从 1 开始到创建的文件数
%s:备份集的号
%t:备份集时间戳
%T:年月日格式(YYYYMMDD)

温馨提示:设置 NONE 时可将备份保持策略失效,使用 CLEAR 时将恢复默认的保持策略。

RMAN 备份压缩

前面,讲解 RMAN 原理时,提到过备份压缩的概念,这里再补充下 RMAN 备份压缩的实践操作,另外,需要知道的是压缩适用于 CONTRILFILE、ARCHIVELOG、DATAFILE 等,启用压缩后数据文件体积会减少到 2 ~ 4 倍,但是备份时间和恢复时间会增长,并且备份期间会消耗更多的 CPU 资源。

使用演示

实际上,在RMAN中启用压缩非常简单,要么在 RMAN 参数配置默认的压缩,例如

-- 设置为BASIC压缩(Oracle 11g及以上)
RMAN> CONFIGURE COMPRESSION ALGORITHM 'BASIC';

-- 设置为LOW压缩(平衡压缩比和性能)
RMAN> CONFIGURE COMPRESSION ALGORITHM 'LOW';

-- 设置为MEDIUM压缩(较好的压缩比)
RMAN> CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';

-- 设置为HIGH压缩(最高压缩比,但CPU消耗最大)
RMAN> CONFIGURE COMPRESSION ALGORITHM 'HIGH';

-- 配置设备备份类型为压缩备份集
RMAN> CONFIGURE DEVICE TYPE DISK BACKUPTYPETO COMPRESSED BACKUPSET PARALLELISM 4;

-- 配置不启用压缩备份集
RMAN> CONFIGURE DEVICE TYPE DISK BACKUPTYPETO BACKUPSET;

或者是不想改变默认配置,可以在单次备份中指定:

-- 使用特定压缩级别的单次完整备份
RMAN> CONFIGURE COMPRESSION ALGORITHM 'LOW';
RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;

-- 备份特定表空间并指定格式
RMAN> BACKUP AS COMPRESSED BACKUPSET TABLESPACE USERS FORMAT 'c:/backup/rman/%d_users_%U.dbf' ;

weiyigeek.top-验证压缩备份与原生备份的空间占用图

另外,可执行下述语句,查看当前/重置 RMAN 压缩配置:

-- 查看当前RMAN压缩配置
RMAN> SHOW COMPRESSION USING;
  db_unique_name 为 BKHISTDB 的数据库的 RMAN 配置参数为:
  CONFIGURE COMPRESSION ALGORITHM 'LOW' AS OF RELEASE'DEFAULT'OPTIMIZEFORLOADTRUE;

-- 查看RMAN压缩算法配置
RMAN> SHOW COMPRESSION ALGORITHM;

-- 使用 CLEAR 重置压缩算法
CONFIGURE COMPRESSION ALGORITHM CLEAR;

知识扩展:压缩级别选择需谨慎,因为压缩级别越高,CPU消耗越大,但同时也能获得更好的数据压缩率。

BASIC/LOW:CPU资源紧张时使用

MEDIUM:平衡压缩比和性能(推荐大多数场景)

HIGH:存储空间紧张且CPU充足时使用

RMAN 备份验证

RMAN 提供了 VALIDATE 命令 与 ADVISOR工具 来验证或修护备份的完整性和一致性,以确保在需要时能够成功恢复数据。

其中,VALIDATE 命令支持对单个备份集和数据块进行验证,默认其只检查物理损坏,当然也可指定 CHECK LOGICAL 检查逻辑损坏,另外,块损坏可分为块间损坏和块内损坏,VALIDATE 命令只检查块内损坏。

在块内损坏中,块本身发生损坏,可以是物理损坏也可以是逻辑损坏。

在块间损坏中,块与块之间发生的损坏只能是逻辑损坏。

命令演示

# 检查验证数据库备份的物理坏块
RMAN> VALIDATE DATABASE;
# 数据文件列表
# =================
# 文件状态 标记为损坏 空块 已检查的块 高 SCN
# ---- ------ -------------- ------------ --------------- ----------
# 3    OK     0              24179        131866          2746954
#   文件名: C:APPORACLEORADATABKHISTDBSYSAUX01.DBF
#   块类型 失败的块 已处理的块
#   ---------- -------------- ----------------
#   数据       0              32677
#   索引      0              31740
#   其他      0              43244

# 在 04-11月-25 完成了 validate

# 检查验证数据库备份的逻辑坏块,只做检查动作
RMAN> VALIDATE CHECK LOGICAL DATABASE;

# 显示异常的文件数量
RMAN> LIST FAILURE;
数据库角色: PRIMARY
未找到与指定项匹配的故障

# 显示需要恢复的文件详细信息
RMAN> ADVISE FAILURE

# 显示需要恢复操作的脚本,并把脚本存放到某个路径下
RMAN> REPAIR FAILURE PREVIEW;

# 恢复操作
RMAN> REPAIR FAILURE;

# 检查逻辑错误的同时进行备份
RMAN> BACKUP CHECK LOGICAL DATABASE;
RMAN> BACKUP VALIDATE CHECK LOGICAL DATABASE; # 仅仅检查

另外,在执行 VALIDATE 命令时,还可指定备份集关键字(例如:BACKUPSET 1234567890),这样可以只验证特定的备份集,而不是整个数据库。

-- 定期验证备份集可恢复性
RMAN> VALIDATE BACKUPSET 123;

-- 验证RMAN备份是否有效实用
RMAN> RESTORE VALIDATE DATABASE;
RMAN> RESTORE VALIDATE CONTROLFILE;
RMAN> RESTORE VALIDATE SPFILE;

-- 或者,一条命令搞定
RMAN> VALIDATE BACKUPSET ALL;

weiyigeek.top-测试恢复图

RMAN 删除备份

在执行删除命令前,务必先确认要删除的备份,你可以使用 LIST BACKUP SUMMARY; 或 LIST BACKUP; 命令查看所有备份的概要或详细信息,包括备份集的关键字、标签、完成时间等,若要在生产环境中执行删除操作之前,强烈建议你先备份这些RMAN备份文件(如果还有存储空间的话),并确保它们确实不再需要用于恢复。

特别注意:通常,我们很少需要一次性清空所有 RMAN 备份,除非是测试环境重置或确定这些备份完全无用,在生产环境中,这样做风险极高,会导致数据库失去恢复能力。

这里作者单独罗列出来,主要是考虑到各位看友在测试操作时会有大量的备份集以及归档日志产生,让大家了解可使用下述命令进行清空备份的操作。

主要命令 清空场景/目的 备注
DELETE BACKUP; ️ 删除所有备份集 删除所有备份集,但不删除映像副本
DELETE BACKUP DEVICE TYPE DISK; ️ 删除类型为磁盘所有备份集和归档日志备份 清空 RMAN 目录中的相关备份
DELETE COPY; ️ 删除所有映像副本 删除所有数据文件副本、归档日志副本等
DELETE BACKUPSET <备份集关键字>;  删除指定备份集 通过 LIST BACKUP; 查询备份集关键字
DELETE BACKUP TAG '<备份标签>'; ️ 按标签删除备份 通过 LIST BACKUP; 查询备份标签
DELETE OBSOLETE; ⏰ 根据保留策略删除过期备份 需先配置保留策略,如 CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
CROSSCHECK BACKUP;
DELETE EXPIRED BACKUP;
核对并删除失效备份 CROSSCHECK 核对备份状态,DELETE EXPIRED 删除失效备份。
CROSSCHECK COPY;
DELETE EXPIRED COPY;
核对并删除失效副本 CROSSCHECK 核对备份状态,DELETE EXPIRED 删除失效副本。
DELETE ARCHIVELOG ALL; ️ 删除所有归档日志 通过 list archivelog all; 查询数据库的归档日志副本列表
CROSSCHECK ARCHIVELOG ALL;  核对所有归档 通过 list archivelog all; 查询数据库的归档日志副本列表
BACKUP ARCHIVELOG ALL DELETE INPUT;  备份归档日志后删除原日志 备份后自动删除原归档日志。

更常见的需求是清理特定范围或过期的备份,例如:

清理前一天的备份:可以先使用 LIST BACKUP; 查看备份列表,找到前一天备份对应的标签(TAG),然后使用 DELETE BACKUP TAG '<备份标签>'; 命令删除。

清理过期或失效的备份:根据配置的保留策略(例如冗余策略 REDUNDANCY 或恢复窗口策略 RECOVERY WINDOW),使用 REPORT OBSOLETE; 查看过期的备份,然后使用 DELETE OBSOLETE; 进行删除。在执行删除过期备份前,最好先执行 CROSSCHECK BACKUP; 命令核对备份集的有效性。

清理指定天数前的归档日志,例如:删除七天前的归档

# 删除7天前的归档
DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7';

慎用、慎用、慎用: 在备份清理 RMAN 脚本中常常会使用到 noprompt 关键字,用于无需确认执行操作,例如:

# 不用确认删除所有备份
DELETE NOPROMPT BACKUP ;

# 不用确认删除所有归档日志 (慎用,清空全部归档日志文件)
DELETE NOPROMPT ARCHIVELOG ALL;

其他操作

若需要删除在 RMAN 磁盘目录下的备份集备份,可以使用 DELETE BACKUP DEVICE TYPE DISK; 命令。

weiyigeek.top-删除在 RMAN 磁盘目录下的备份图

若需删除存在、已不存在与 RMAN 磁盘目录下的数据文件镜像副本列表,可以下述命令。

# 查看镜像副本
RMAN> list copy;
# 关键字     文件 S 完成时间   Ckp SCN    Ckp 时间   稀疏
# ------- ---- - ---------- ---------- ---------- ------
# 2       1    A 30-10月-25 2090480    30-10月-25 NO
#         名称: C:BACKUPRMANDATA_D-BKHISTDB_I-3060694697_TS-SYSTEM_FNO-1_0647HQF7
#         标记: TAG20251030T172911

# 删除指定关键字数据文件镜像副本
RMAN> DELETE DATAFILECOPY 2;
# 已删除数据文件的副本
# 数据文件副本文件名 = C:BACKUPRMANDATA_D-BKHISTDB_I-3060694697_TS-SYSTEM_FNO-1_0647HQF7 RECID=2 STAMP=1215883757
# 1 对象已删除

# 核对数据文件副本的有效性
RMAN> CROSSCHECK COPY;
# 删除失效的数据文件映像副本
RMAN> DELETE EXPIRED COPY;

weiyigeek.top-删除校验失败的数据文件副本图

RMAN CATALOG 备份

Oracle RMAN中的恢复目录(Recovery Catalog)是一个可选的、独立的数据库schema,用于集中存储RMAN的备份元数据,使用恢复目录的好处包括:

集中管理:所有数据库的备份元数据都存储在同一个地方,便于管理和查询。

安全性增强:集中管理可以更好地控制访问权限,提高数据的安全性。

功能增强:恢复目录提供了额外的RMAN功能,如备份集的复制、跨数据库的备份管理等。

易于迁移和复制:恢复目录可以轻松地在不同环境中迁移或复制,便于在不同数据库之间共享备份。

易于维护:恢复目录可以轻松地升级和维护,无需对每个数据库单独操作。

温馨提示:此处简单了解即可,在作者的生产环境中,使用的是无恢复目录(Nocatalog)模式,后续遇到需要使用 Catalog 再详细讲解。

恢复目录(Catalog)与无恢复目录(Nocatalog)的区别?

    恢复目录(Catalog)为RMAN提供了更集中、更安全、功能更强大的备份元数据管理方式,特别适合管理多个数据库或需要长期保留备份历史的场景。无恢复目录(Nocatalog)模式则架构简单,实际上是使用控制文件记录备份信息,适用于备份环境不复杂或数据库数量较少的情况。

使用实践

步骤 01.创建恢复目录,首先得找一个专用的Oracle数据库(甚至可以是一个小型数据库),创建表空间以及用户。

CREATE TABLESPACE rmanspace DATAFILE '/u01/app/oracle/oradata/bkdb/rmanspace.dbf' SIZE 20M autoextendon;

CREATE USER rmancatelog IDENTIFIEDBY WeiyigeekTop DEFAULT TABLESPACE rmanspace QUOTA UNLIMITED ON rmanspace;

GRANT CONNECT,RESOURCE,RECOVERY_CATALOG_OWNER TO rmancatelog;

步骤 02.在业务数据库数据库中,使用rman连接到远程备份数据库,并注册恢复目录。

rman CATALOG rmancatelog/WeiyigeekTop@192.168.0.162:1521/BKHISTDB;
  # 连接到恢复目录数据库

RMAN> CREATE CATALOG TABLESPACE rmanspace;
  # 恢复目录已创建

# 实际上会在 RMANCATELOG 用户(模式)中创建一些表,用以存储备份信息
col TABLE_NAME for a30
SELECT table_name, num_rows FROM all_tables WHERE owner = 'RMANCATELOG';  

weiyigeek.top-远程备份数据库图

步骤 03.登录到本地 rman 以及远程 catelog,将你需要备份的数据库(目标数据库)注册到这个恢复目录中。

rman TARGET / CATALOG rmancatelog/WeiyigeekTop@192.168.0.162:1521/BKHISTDB;
  已连接到目标数据库: BKHISTDB (DBID=3060694697)  # -- 本地备份
  连接到恢复目录数据库                            # -- 远程备份数据库
RMAN> REGISTER DATABASE;
  注册在恢复目录中的数据库
  正在启动恢复目录的全部重新同步
  完成全部重新同步

步骤 04.备份指定的编号的数据文件到恢复目录中,或使用 CATALOG 命令将这些备份记录到恢复目录中

-- 备份控制文件
RMAN> BACKUP CURRENT CONTROLFILE;

-- 备份关键序号为 1 的 SYSTEM 表空间,此时将自动备份控制文件和SPFILE
RMAN> BACKUP DATAFILE 1;

-- 备份全部数据文件,并包含控制文件
RMAN> BACKUP DATABASE INCLUDING CURRENT CONTROLFILE;

-- 备份跳过脱机、不可取、或只读的数据文件
RMAN> BACKUP DATABASE SKIP OFFLINE SKIP INACCESSIBLE SKIP READONLY;

-- 备份数据文件时同时备份归档日志
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

-- 备份指定周内没有备份的数据文件
RMAN> BACKUP DATABASE NOT BACKED UP;
RMAN> BACKUP DATABASE NOT BACKED UP SINCE TIME'SYSDATE-7';
-- 从位于 04-11月-25 的 backup 开始
-- 使用通道 ORA_DISK_1
-- 使用通道 ORA_DISK_2
-- 使用通道 ORA_DISK_3
-- 使用通道 ORA_DISK_4
-- 正在跳过数据文件 1; 已在 04-11月-25 上备份
-- 正在跳过数据文件 3; 已在 04-11月-25 上备份
-- 正在跳过数据文件 5; 已在 04-11月-25 上备份
-- 正在跳过数据文件 7; 已在 04-11月-25 上备份
-- 正在跳过数据文件 8; 已在 04-11月-25 上备份
-- 正在跳过数据文件 9; 已在 04-11月-25 上备份
-- 正在跳过数据文件 10; 已在 04-11月-25 上备份
-- 正在跳过数据文件 11; 已在 04-11月-25 上备份
-- 在 04-11月-25 完成了 backup

-- 备份归档日志
RMAN> BACKUP ARCHIVELOG ALL;
RMAN> BACKUP ARCHIVELOG ALL DELETE ALL INPUT;  -- 备份完毕后删除所有归档日志

-- 最佳实践:对数据块常规校验和验证,还会检查块内逻辑损坏。
RMAN> BACKUP CHECK LOGICAL DATABASE PLUS ARCHIVELOG DELETE INPUT;

-- 编录指定目录下所有可识别的备份文件
RMAN> CATALOG START WITH '/home/oracle/oradata/test/';

-- 目录同步
RMAN> RESYNC CATALOG;
-- 正在启动恢复目录的全部重新同步
-- 完成全部重新同步

温馨提示:PLUS ARCHIVELOG; 首先运行一个 ALTER SYSTEM ARCHIVELOG CURRENT 命令,以确保备份包含最新的归档日志,然后再运行 BACKUP ARCHIVELOG ALL; 命令备份归档日志, 注意:若此时备份优化被启用,RMAN 只会备份未备份过的日志。

步骤 05.使用自动备份近些恢复。

# SPFILE 文件
RMAN> restore spfile to 'C:apporacleproduct12.2.0dbhome_1databaseSPFILEBKHISTDB.ORA' from autobackup;

# 控制文件
RMAN> restore controlfile to 'C:/backup/CONTROL01.CTL' from autobackup;

# 数据库
RMAN> restore database;
RMAN> restore database CHECK READONLY;  # 完全恢复期间还原只读的数据文件。 
RMAN> recover database;

# 表空间
RMAN> restore tablespace users;
RMAN> recover tablespace users;

# 归档重组日志(通常不需要恢复)
RMAN> RESTORE ARCHIVELOG ALL;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=10;  # 恢复归档日志序列号从 1 到 10 的部分
# 也可将其恢复到指定目录
run {
set arhivelog destination to 'C:/backup/arch';
  restore archivelog all;
}
# 当归档日志缺失
RECOVER DATABASE UNTIL CANCEL USING BACKUP CONTROLFILE;

# 块级别恢复(Block Media Recovery,BMR),块是恢复最小单元,通过块可以减少恢复时间,而数据文件可以在线,但是在恢复时必须指定具体的块号。
RMAN> blockrecover datafile 1 block 3;

温馨提示:恢复目录数据库本身也需要定期备份。同时,注意监控其表空间使用情况,避免因空间不足导致问题。

RMAN 物理备份与恢复实践,请参考下一篇《DBA | Oracle RMAN 实战:物理备份与数据恢复全解析》文章。

加入:作者【全栈工程师修炼指南】知识星球

『 全栈工程师修炼指南』星球,主要涉及全栈工程师(Full Stack Development)实践文章,包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。

相关推荐