Oracle教程(7)RMAN 物理备份教程与实战

Oracle教程(7)RMAN 物理备份教程与实战

一、RMAN 介绍

RMAN 是 Oracle 自带的物理备份工具,它的核心作用是保护数据库的物理完整性,确保在发生磁盘损坏、误删数据文件、服务器整体故障等灾难场景下能够将数据库恢复到某个可用的状态。RMAN 处理的是整个数据库、表空间文件或数据文件这样的物理对象。除了对整个实例进行全量备份外,还可以单独备份控制文件、spfile、归档日志等关键文件,保护整个数据库的物理完整性;备份期间数据库可以正常读写,并且支持增量备份,只处理自上次备份以来发生变化的部分,在处理TB级别的大型数据库时非常有用;配合归档模式,理论上可以把数据库恢复到发生故障前的任意一个时间点。

二、RMAN 使用方法

1、连接 RMAN

· 操作系统认证

通过数据库服务器本地连接RMAN时最常用的方式,不需要在命令行明文写密码。关键词 target 后面跟上需要连接的数据库目标, / 表示用操作系统当前登录用户的身份进行认证(通常直接用 oracle 用户就会满足这个条件)

[oracle@ftxsdb ~]$ rman  target /
connected to target database: FTXS (DBID=2207681056)

RMAN>


· 指定用户名密码连接

该方式可以连接本地数据库也可以连接到远程数据库,orcl 是 tnsnames.ora 里配置的连接标识符(网络服务名)

SQL> show parameter service_names;                 #服务名是ftxsprdu
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
service_names                 string     ftxsprdu


#命令格式:rman target 用户名/密码@服务名
rman target adg_user/ADGuser#202609@ftxsprdu
connected to target database: FTXSPRDU (DBID=2207681056)

RMAN>


· 交互式连接

会提示交互式输入密码,密码不会明文暴露,更安全

#命令格式:rman target 用户名@服务名
[oracle@ftxsdb ~]$ rman target adg_user@ftxsprdu
target database Password:


· 带上恢复目录

在 / 后面加关键词 catalog 用户/密码@服务名,可以同时连接 target 库和 catalog 库

rman target / catalog 用户名/密码@服务名


· 进入 RMAN 后再连接

等效于上面几种,只是分两步执行

rman
RMAN> connect target /


2、RMAN 备份策略说明

连接上RMAN后执行show all可以打印出当前针对RMAN进行的配置,比如保留策略、并行度、控制文件自动备份是否开启等,每一项配置后面如果有 #default 代表没有被人为修改过的默认配置,没标的则是特意配置过的

#查看当前备份策略
RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name FTXSPRDU are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 7;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/app/oracle/product/19.10/db_1/dbs/snapcf_ftxsprdu.f'; # default


· CONFIGURE RETENTION POLICY TO <策略> :全备/0级备份的保留策略,可以按份数保留也可以按时间保留,只能二选一,后者覆盖前者。超过限额后最早的备份会在下次 DELETE OBSOLETE 时被标记为过期

CONFIGURE RETENTION POLICY TO REDUNDANCY 7;          -- 按份数:保留7份
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;  -- 按时间窗口保证7天内任意点可恢复


· CONFIGURE BACKUP OPTIMIZATION OFF:开启后如果某个文件跟上次备份相比没有变化就会跳过不重复备份。默认关闭,表示每次备份都会处理所有文件


· CONFIGURE DEFAULT DEVICE TYPE TO DISK:默认备份介质是磁盘,通常不用修改


· CONFIGURE CONTROLFILE AUTOBACKUP ON:控制文件自动备份,需要保持开启,这样每次 BACKUP 执行完以及每次影响到备份元数据的操作都会自动备份控制文件和 spfile

CONFIGURE CONTROLFILE AUTOBACKUP ON;


· CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F':控制文件自动备份的文件名格式,默认会写到 db_recovery_file_dest(也就是 FRA)下


· CONFIGURE DEVICE TYPE DISK PARALLELISM <n> BACKUP TYPE TO <BACKUPSET|COPY>:备份并行度和格式。PARALLELISM数字越大,并发越高,备份速度越快,但是对 CPU 和 I/O 消耗也越大;BACKUP TYPE 备份格式用 backup set表示只备份已用块,COPY是镜像拷贝,占空间更多,但恢复速度快

CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;


· CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1:每个数据文件只保留 1 份备份

· CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1:归档日志只保留 1 份

· CONFIGURE MAXSETSIZE TO UNLIMITED:不限制单个备份集大小

· CONFIGURE ENCRYPTION FOR DATABASE OFF:关闭加密备份

· CONFIGURE COMPRESSION ALGORITHM 'BASIC' ...:压缩算法

· CONFIGURE ARCHIVELOG DELETION POLICY TO <策略>:NONE表示执行 DELETE ARCHIVE LOG 或者磁盘空间不足需要 RMAN 自动清理归档日志时,没有"至少备份过 N 次才能删"的约束。如果有备库建议配置 TO APPLIED ON ALL STANDBY,表示备库都应用过才允许删,避免归档被误删导致备库断档或者恢复链断裂

CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DISK;  -- 至少成功备份1次才能删
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;                        -- 无限制(默认)


· CONFIGURE SNAPSHOT CONTROLFILE NAME TO '...snapcf_ftxsprdu.f':快照控制文件路径,备份控制文件时会先在这里做一个一致性快照再去备份,通常保持默认即可

· CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '<路径模板>':备份文件默认存放路径

CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/%d_%T_%U.bkp';


3、RMAN 备份策略修改 

如果要对RMAN默认配置进行修改或者重置,需要使用 CONFIGURE 命令,不管是修改还是重置,RMAN都会把改动前的值打印出来,方便修改后了后快速重置

#修改参数
CONFIGURE 参数名 TO 值;

#重置参数
CONFIGURE 参数名 CLEAR;


配置示例

CONFIGURE RETENTION POLICY TO REDUNDANCY 7;              -- 保留 7 份
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;  -- 改成按时间窗口保留7天,和 REDUNDANCY 互斥,配了会自动取消前者
CONFIGURE RETENTION POLICY CLEAR;                          -- 改回默认 REDUNDANCY 1

CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;
CONFIGURE DEVICE TYPE DISK CLEAR;                           

CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DISK;  -- 至少备份过1次才允许删
CONFIGURE ARCHIVELOG DELETION POLICY CLEAR;


CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/%d_%T_%U.bkp';
CONFIGURE CHANNEL DEVICE TYPE DISK CLEAR;

4、RMAN 备份语法

BACKUP [备份格式] [增量级别] 备份对象 [FORMAT ...] [TAG ...] [其他选项];

--命令骨架
BACKUP [格式: AS BACKUPSET / AS COMPRESSED BACKUPSET / AS COPY]
       [级别: INCREMENTAL LEVEL 0 / LEVEL 1 / LEVEL 1 CUMULATIVE]
       [对象: DATABASE / TABLESPACE xx / DATAFILE n / ARCHIVELOG ALL]
       [FORMAT ...] [TAG ...] [PLUS ARCHIVELOG ...] [DELETE INPUT];

--示例
BACKUP AS COMPRESSED BACKUPSET
  INCREMENTAL LEVEL 0
  DATABASE
  FORMAT '/backup/%d_%T_%U_lvl1.bkp'
  TAG 'DAILY_L1'
  PLUS ARCHIVELOG
  FORMAT '/backup/%d_%T_%U.arc';

· 备份格式

BACKUPSET表示只备份已使用的块,备份可压缩,是最常用的格式;COMPRESSED BACKUPSET在基础上增加压缩,默认压缩算法是 BASIC;COPY 逐字节复制整个数据文件,体积和原文件一样大,恢复时可以用 SWITCH TO COPY 直接切换使用,不需要restore,速度最快

BACKUP AS BACKUPSET DATABASE;              -- 备份集(默认,可省略AS BACKUPSET)
BACKUP AS COMPRESSED BACKUPSET DATABASE;   -- 备份集+压缩
BACKUP AS COPY DATABASE;                   -- 镜像拷贝


· 增量级别

不带 INCREMENTAL 的全备不能被后续的 LEVEL 1 增量当作基线使用。要建立增量链第一次必须显式写 INCREMENTAL LEVEL 0。如果在没有基线备份的情况下又使用了增量备份,RMAN 会自动把这次操作当成一次 0 级备份来执行。差异增量每次只备"上一次备份以来"的变化,每次备份的体积小,但恢复时要应用的增量片多;累积增量备的是"从最近一次0级以来"的全部变化,体积会逐渐变大,恢复时只需要 0级+最后一次累积

BACKUP INCREMENTAL LEVEL 0 DATABASE;              -- 增量备份基线,等同全备但能作为增量起点
BACKUP INCREMENTAL LEVEL 1 DATABASE;               -- 差异增量:备份自上次0级或1级以来变化的块
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;    -- 累积增量:备份自上次0级以来变化的块
BACKUP DATABASE;                                    -- 不写级别 = 普通全备,但是不能作为增量基线

· 备份对象

BACKUP DATABASE;                    -- 整个数据库
BACKUP TABLESPACE users;            -- 指定表空间,可以逗号加多个
BACKUP DATAFILE 4;                  -- 指定数据文件号(用REPORT SCHEMA能查到号)
BACKUP CURRENT CONTROLFILE;         -- 当前控制文件
BACKUP SPFILE;                      -- 参数文件
BACKUP ARCHIVELOG ALL;              -- 所有归档日志

· 其他选项

-- PLUS ARCHIVELOG 备份同时带上归档日志
BACKUP DATABASE PLUS ARCHIVELOG;  

-- FORMAT指定文件名,%d表示数据库名;%T为日期(YYYYMMDD);%U是系统生成的唯一标识,必须包含;%F只用于控制文件自动备份,格式固定 
BACKUP DATABASE FORMAT '/backup/%d_%T_%U.bkp';

-- TAG 给备份打标签
BACKUP DATABASE TAG 'WEEKLY_FULL';

--只用在归档日志备份上,备份完把原文件删除
BACKUP ARCHIVELOG ALL DELETE INPUT;


5、RMAN 备份结果

LIST BACKUP SUMMARY 命令会直接从 RMAN 的记录里查看备份历史,用于查看数据库现在到底有没有可用的备份、最近一次成功的备份是什么时候等信息,这也是评估如果数据库出问题了能恢复到多久之前的数据的依据。LIST BACKUP SUMMARY 里每行是一个 backup set,一次 level 0 全备会按通道数、MAXSETSIZE 等参数拆成十几个甚至几十个备份集,这些备份集共用同一个 Tag

RMAN>LIST BACKUP SUMMARY;  

using target database control file instead of recovery catalog

List of Backups
===============
Key     TY LV S Device Type Completion Time     #Pieces #Copies Compressed Tag
------- -- -- - ----------- ------------------- ------- ------- ---------- ---
13828   B  F  A DISK        2026/09/08 02:08:38 1       1       NO         TAG20260908T020838
13839   B  F  A DISK        2026/09/09 02:08:38 1       1       NO         TAG20260909T020838
13850   B  F  A DISK        2026/09/10 02:08:48 1       1       NO         TAG20260910T020848
13861   B  F  A DISK        2026/09/11 02:08:38 1       1       NO         TAG20260911T020838
13872   B  F  A DISK        2026/09/12 02:08:28 1       1       NO         TAG20260912T020828
13883   B  F  A DISK        2026/09/13 02:08:48 1       1       NO         TAG20260913T020848
13884   B  A  A DISK        2026/09/14 02:00:13 1       1       YES        TAG20260914T020010
13885   B  A  A DISK        2026/09/14 02:00:20 1       1       YES        TAG20260914T020010
13886   B  A  A DISK        2026/09/14 02:00:20 1       1       YES        TAG20260914T020010
13887   B  A  A DISK        2026/09/14 02:00:20 1       1       YES        TAG20260914T020010
13888   B  0  A DISK        2026/09/14 02:01:03 1       1       YES        TAG20260914T020025
13889   B  0  A DISK        2026/09/14 02:03:31 1       1       YES        TAG20260914T020025
13890   B  0  A DISK        2026/09/14 02:05:29 1       1       YES        TAG20260914T020025
13891   B  0  A DISK        2026/09/14 02:08:24 2       1       YES        TAG20260914T020025
13892   B  A  A DISK        2026/09/14 02:08:26 1       1       YES        TAG20260914T020826
13893   B  F  A DISK        2026/09/14 02:08:28 1       1       NO         TAG20260914T020827
13894   B  F  A DISK        2026/09/14 02:08:30 1       1       NO         TAG20260914T020830

· Key:备份记录自增编号,主要用来在 DELETE、CROSSCHECK 时进行指定

· TY:备份类型,B表示 backup set(备份集),如果是 AS COPY 镜像拷贝会显示别的标识

· LV:备份级别,F表示全备(full backup,但不能作为增量基线);0表示增量 0 级(可作为增量基线);1表示增量 1 级;A表示归档日志备份

· S:备份状态,A 表示 Available(可用);X 表示 Expired(过期);D 是 Deleted

· Device Type:备份介质,通常为 DISK

· Completion Time:备份完成时间点

· #Pieces:备份集包含几个物理文件备份片

· #Copies:备份保留了几份冗余拷贝

· Compressed:是否压缩

· Tag:备份标签,默认格式是 TAG + 时间戳,没有手动指定的话系统会自动生成


6、RMAN 维护类命令

· CROSSCHECK:核对 RMAN 备份记录所对应的物理文件还在磁盘上,检查是否有备份文件有被 rm 命令删除过的情况,

文件还在就把状态标记为 AVAILABLE,文件不在了就标记为 EXPIRED

CROSSCHECK BACKUP;
CROSSCHECK ARCHIVELOG ALL;
CROSSCHECK BACKUPSET;
CROSSCHECK COPY;


· LIST:查看现有的备份记录

LIST BACKUP [OF <对象>] [SUMMARY];

 #备份摘要,适合看备份整体情况
LIST BACKUP SUMMARY   

# LIST BACKUP OF <对象>——按对象过滤,看某一类的详细信息
LIST BACKUP OF DATABASE;
LIST BACKUP OF ARCHIVELOG ALL;
LIST BACKUP OF DATAFILE 4;
LIST BACKUP OF CONTROLFILE;


· DELETE:删除备份文件与记录, NOPROMPT 参数可以取消人工确认的交互,用于脚本自动化

DELETE [NOPROMPT] <过滤条件>;

DELETE NOPROMPT EXPIRED BACKUP;     #删掉失效的备份记录(配合CROSSCHECK使用),不会产生实际的磁盘释放,因为文件本来就没了
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
DELETE NOPROMPT OBSOLETE;                 -- 删掉按保留策略已经多余的备份文件,可以释放磁盘
DELETE NOPROMPT BACKUP OF DATABASE;           -- 删掉数据库本体的所有备份
DELETE NOPROMPT BACKUPSET 13828;              -- 按具体Key号精确删除某一条


· REPORT:基于策略做分析、给结论,和 LIST 的本质区别在于LIST 只是把数据展示出来,而 REPORT 是给出一个判断结论

#列出当前库所有数据文件的编号、大小、路径,常用来查 DATAFILE n 里的 n 对应哪个文件
REPORT SCHEMA;

#按保留策略算出哪些文件的备份不够新了,需要重新备份
REPORT NEED BACKUP;

#如果现在执行 DELETE OBSOLETE 会删掉哪些内容,是 DELETE 前的安全预览
REPORT OBSOLETE;



RMAN 维护命令使用实例

#先核实每条记录对应的文件是否还在磁盘,然后刷新 RMAN 内部状态,已经不存在了的文件会被标记成 EXPIRED
RMAN> CROSSCHECK BACKUP;
RMAN> CROSSCHECK ARCHIVELOG ALL;

#把 EXPIRED 的记录从 RMAN 里删掉。这一步不会释放任何磁盘空间(文件本来就已经不在磁盘上了),只是清理记录
RMAN> DELETE NOPROMPT EXPIRED BACKUP;
RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;

#删除前先看一眼会删掉什么
RMAN> REPORT OBSOLETE;

#按配置的保留策略(比如 REDUNDANCY 7)把多余的备份连文件带记录一起删掉
RMAN> DELETE NOPROMPT OBSOLETE;

#查看清理后的现状
RMAN> LIST BACKUP SUMMARY;

#健康检查
RMAN> REPORT SCHEMA;
RMAN> REPORT NEED BACKUP;


文章评论

猜你喜欢

Oracle教程(8)Oracle 19C 单实例调整为 ADG 架构

MySQL | Oracle Oracle教程(8)Oracle 19C 单实例调整为 ADG 架构

一、ADG架构介绍Active Data Guard 简称ADG,是 Oracle Data Guard 架构下给物理备库(Physical Standby)追加的一个功能,非ADG模式下的物理备库只...

Oracle运维管理——修改用户密码过期时间

MySQL | Oracle Oracle运维管理——修改用户密码过期时间

在 Oracle 数据库中,用户的密码有效期通过PROFILE(资源限制配置文件)中的 PASSWORD_LIFE_TIME 参数控制。如果没有为用户单独创建 PROFILE,默认使用一个...

Oracle教程(6)SGA\PGA\REDO核心参数调优

MySQL | Oracle Oracle教程(6)SGA\PGA\REDO核心参数调优

一、Oracle核心参数介绍1、SGASGA(System Global Area)是 Oracle 实例启动时分配的共享内存区域,所有连接到该实例的会话都共用这块内存,是整个数据库实例对外提供服务的...

Oracle教程(5)数据泵逻辑备份教程与实战

MySQL | Oracle Oracle教程(5)数据泵逻辑备份教程与实战

一、数据泵介绍数据泵(Data Pump)是 Oracle 10g 开始引入的命令行逻辑备份与恢复工具。通过 expdp / impdp ,可以对所有数据库对象(模式、表数据、表空间等)进行高效导出和...

MySQL教程(13)基于Position或GTID实现主从复制

MySQL | Oracle MySQL教程(13)基于Position或GTID实现主从复制

一、MySQL主从复制概述主从复制是MySQL高可用与横向扩展的基础方案,其核心依赖于 MySQL 自身的 Binlog 机制。主节点的 Binlog 记录了数据库上所有的 DDL 与 DML 操作(...