1、概念

RMANRecovery Manager)称为恢复管理器,是ORACLE进行数据库备份(backup)、修复(restore)和恢复(recover)的一个常用工具。

2、RMAN备份对象的分类

使用RMAN可以备份以下对象:

(1)整个数据库

(2)数据文件

(3)表空间

(4)归档重做日志文件

(5)控制文件

(6)初始化参数文件

3、RMAN备份形式

RMAN备份分为镜像复制备份集两种:

3.1 镜像复制

是对数据文件、控制文件和归档重做日志文件进行复制,镜像复制文件与原文件大小相同,原文件中未使用的数据块也被复制到备份文件中。

3.2 备份集(Backup set)

备份集是RMAN创建的一个具有特定格式的逻辑对象,一个备份集在物理上由一个或多个RMAN指定格式的二进制文件组成。每一个备份文件称为一个备份片(Backup Piece)。

4、RMAN备份类型

4.1 完全备份

完全备份(FULL Backup)是指对数据文件进行备份时,不管数据文件中的数据块是否被修改都复制到备份中。

4.2 增量备份

增量备份(Incremental Backup)是指备份数据文件时,只备份上次增量备份后被修改过的数据块。根据增量备份所参照的基础不同

增量备份又分为差异增量备份(Differential Incremental Backup)和累积增量备份(Cumulative Incremental Backup)两种。

4.2.1 差异增量备份

以最近级别为0或1的增量备份为基础,复制所有被修改过的数据块(默认为差异增量备份)。比如:每周周日对数据库做级别为0的增量备份,即备份数据库中所有被使用的数据块,其余每天对数据库做差异增量备份,即周一备份相对周日的增量备份发生数据变化的数据块,周二备份相对于周一的增量备份发生数据变化的数据块,……以此类推。

4.2.2 累积增量备份

以最近级别为0的增量备份为基础,复制所有被修改过的数据块。比如:每周周日对数据库做级别为0的增量备份,即备份数据库中所有被使用的数据块。其余每天对数据库做累积增量备份,即周一备份相对周日的增量备份发生数据变化的数据块,周二也备份相对于周日的增量备份发生数据变化的数据块,……以此类推。

5、RMAN基本命令

5.1 连接目标数据库

在操作系统命令提示符下输入命令,连接目标数据库:

RMAN TARGET user/password@net_service_name [NOCATALOG];

说明:与目标数据库连接时,用户须具有sysdba系统权限,以保证可以进行数据库的备份、修复与恢复工作。

举例:

[oracle@node1 ~]$ rman target /

也可以先进入rman,再执行以下命令:

CONNECT TARGET | CATALOG user/password@net_service_name [NOCATALOG];

说明:

(1)TARGET:连接目标数据库;

(2)CATALOG:连接恢复目录数据库;

(3)net_service_name:连接远程数据库,指定服务名;

(4)NOCATALOG:表示不使用恢复目录保存档案资料库信息,档案资料库信息保存在目标数据库的控制文件中

举例:

[oracle@node1 ~]$ rmanRMAN> connect target /

5.2 启动与关闭数据库

在RMAN中,可以启动和关闭数据库,代码如下:

RMAN> shutdown immediate;RMAN> startup mount;RMAN> alter database open;

关于数据库的启停可以参考本人发布的 Oracle 数据库的启动过程详解

5.3 REPORT SCHEMA命令

获取目标数据库的模式结构:

RMAN> report schema;

5.4、show all命令

查看当前会话中所有RMAN预定义的配置参数的设置情况:

RMAN> show all;

5.4.1 CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

CONFIGURE RETENTIOearN POLICY TO REDUNDANCY 1;

CONFIGURE RETENTION POLICY TO NONE;

第一种recover window是保持所有足够的备份,可以将数据库系统恢复到最近七天内的任意时刻。任何超过最近七天的数据库备份将被标记为obsolete。

第二种redundancy 是为了保持可以恢复的最新的5份数据库备份,任何超过最新5份的备份都将被标记为redundancy。它的默认值是1份。

第三种不需要保持策略,

clear将恢复回默认的保持策略

CONFIGURE RETENTION POLICY clear

5.4.2 CONFIGURE BACKUP OPTIMIZATION OFF; # default

默认值为关闭,如果打开,rman将对备份的数据文件及归档等文件进行一种优化的算法。

5.4.3 CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

CON是指定所有I/O操作的设备类型是硬盘或者磁带,默认值是硬盘

磁带的设置是CONFIGURE DEFAULT DEVICE TYPE TO SBT;

CONFIGURE DEFAULT DEVICE type clear;

5.4.4 FIGURE CONTROLFILE AUTOBACKUP ON; # default

设置控制文件自动备份

强制数据库在备份文件或者执行改变数据库结构的命令之后将控制文件自动备份,默认值为开启。这样可以避免控制文件和catalog丢失后,控制文件仍然可以恢复。

5.4.5 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F’; # default

是配置控制文件的备份路径和备份格式

可以用如下的配置指定控制文件的备份路径与格式,format 指明备份文件的路径和文件名

RMAN备份文件格式 备份文件可以自定义各种各样的格式,如下:

%c 备份片的拷贝数%D 位于该月中的第几天 (DD)%M 位于该年中的第几月 (MM)%F 一个基于DBID 唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD 为日期,QQ 是一个1-256 的序列%d 数据库名称%n 数据库名称,向右填补到最大八个字符%u 一个八个字符的名称代表备份集与创建时间%p 该备份集中的备份片号,从1 开始到创建的文件数%U 一个唯一的文件名,代表%u_%p_%c%s 备份集的号%t 备份集时间戳%T 年月日格式(YYYYMMDD)

5.4.6 CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default

是配置数据库设备类型的并行度。即同时开启1个通道进行备份与恢复

并行的数目决定了开启通道的个数,当然也可以在RUN{}中指定通道来决定备份与恢复的并行程度。如果在RUN{}中指定了通道配置,将覆盖掉配置参数中指定的默认并行度

提高RMAN性能和吞吐量,除了通道数,还可以通过一些参数控制输入数据文件数,备份集数,备份片数。

5.4.7 CONFIGURE MAXSETSIZE TO UNLIMITED; # default

该配置限制通道上备份集的最大尺寸,单位支持 Bytes 、KB、MB、GB,默认值是unlimited

5.4.8 CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 300 M;

限定了最大备份片为300M,如果输出文件是500M(注意不是限制输入文件),文件大小为900M则会在一个备份集中生成两个备份片。

单位支持 Bytes 、KB、MB、GB,默认值是unlimited

CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 300M;

6、CONFIGURE命令

6.1 重新设置RMAN中预定义参数的取值

RMAN> CONFIGURE DEFAULT DEVICE TYPE TO sbt;RMAN> CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';RMAN> show default device type;

说明:参数修改后,查看参数值时后面的注释#default消失。

6.2 使用CLEAR关键字将某个参数恢复到默认值

CONFIGURE RETENTION POLICY clear;

7、在RMAN中执行SQL语句

如果要在使用RMAN时执行SQL或PL/SQL语句,首先在RMAN提示符后输入SQL命令,然后再将要执行的SQL语句用单引号或双引号引起来,最后输入分号即可执行该SQL语句。

例如:

RMAN> SQL 'alter tablespace data01 read only';sql statement: alter tablespace data01 read only

说明:

(1)STARTUP、SHUTDOWN等命令可直接执行;

(2)如果SQL、PL/SQL语句包含单引号,需要在每个单引号之前再加一个单引号。

8、参数影响可有全局和局部两个层次,基本上分为:

PARALLELISM: 保存在RMAN存储库。

CONFIGURE CHANNEL: 更新配置,保存在RMAN存储库。

ALLOCATE CHANNEL: 限于run{},不保存。

BACKUP: 限于本次backup语句,不保存。

8.1 相关参数

在BACKUP语句中描述

FILESPERSET: 每个备份集的最大输入文件数

在ALLOCATE CHANNEL或CONFIGURE CHANNEL中描述

MAXPIECESIZE: 每个通道的备份片大小

MAXSETSIZE: 限制最大备份集大小

8.2 在BACKUP语句中描述

8.2.1 在RUN{}里分配通道,可以指定备份的数据文件和通道对应关系。

例1:

RUN {ALLOCATE CHANNEL c1 DEVICE TYPE DISK;ALLOCATE CHANNEL c2 DEVICE TYPE DISK;ALLOCATE CHANNEL c3 DEVICE TYPE DISK;BACKUPFORMAT '/app/rmanbak/df_%d_%s_%p.bak'(DATAFILE 1,4 CHANNEL c1)(DATAFILE 2,5 CHANNEL c2)(DATAFILE 3,7 CHANNEL c3);}

8.2.2 使用FILESPERSET参数限制备份集中的输入文件数, 指定每个备份集中一次可以包含输入文件最大数,该参数默认值为64。例2中约定每个备份集中备份2个文件。

A. filesperset设置为6,数据文件数目为30,通道数据为4,通过30/4可以得出每个备份集可含有8个文件,取6和8中较小的值6,那么30/6=5个备份集,那么4个通道肯定都有事情可做了。

B. 如果不指定filesperset,假设数据文件数目为30,通道数据为4,通过30/4可以得出每个备份集可含有8个文件,比较8和默认值64,我们取其中较小的8,那么也可以保证4个通道都有事情可做

例2:

rman> RUN{ALLOCATE CHANNEL t1 DEVICE TYPE DISK;ALLOCATE CHANNEL t2 DEVICE TYPE DISK;BACKUP database FILESPERSET 2;}

例2中假如取消ALLOCATE CHANNEL语句,则通道数按全局变量PARALLELISM指定,假定为1,有20个文件,FILESPERSET=8该是怎样的结果:一个通道干活,8个文件组成一个备份集,

每备份集对一个备份片,完成一个备份集再接下一个备份集。串行的跑三趟。

8.2.3 使用MAXPIECESIZE参数限制备份片大小

例3:

RMAN>RUN{CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 300M;BACKUP datafile 3 FORMAT '/app/rmanbak/df_%d_%s_%p.bak';}RMAN> list backup of datafile 3; BS KeyType LV Size Device Type Elapsed Time Completion Time------- ---- -- ---------- ----------- ------------ -------------------162 Full835.74MDISK00:00:03 2023-02-03 09:15:14List of Datafiles in backup set 162File LV Type Ckp SCNCkp TimeAbs Fuz SCN Sparse Name---- -- ---- ---------- ------------------- ----------- ------ ----3 Full 88099892023-02-03 09:15:11NO/app/oracle/oradata/ORCL/sysaux01.dbfBackup Set Copy #1 of backup set 162Device Type Elapsed Time Completion Time Compressed Tag----------- ------------ ------------------- ---------- ---DISK00:00:03 2023-02-03 09:15:14 NO TAG20230203T091511List of Backup Pieces for backup set 162 Copy #1BP KeyPc# StatusPiece Name------- --- ----------- ----------162 1 AVAILABLE /app/rmanbak/df_ORCL_203_1.bak163 2 AVAILABLE /app/rmanbak/df_ORCL_203_2.bak164 3 AVAILABLE /app/rmanbak/df_ORCL_203_3.bak

限定了最大备份片为300M,如果输出文件是500M(注意不是限制输入文件),则会在一个备份集中生成两个备份片。

如果将

CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 300M;

换成

ALLOCATE CHANNEL c1 DEVICE TYPE DISK MAXPIECESIZE 300M;

就是全部和局部的区别

清除限制备份片大小全局参数命令

RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK clear;

8.2.4 使用maxsetsize参数限制备份集大小:

例4:

RMAN> report schema;Report of database schema for database with db_unique_name ORCLList of Permanent Datafiles===========================File Size(MB) Tablespace RB segs Datafile Name---- -------- -------------------- ------- ------------------------1930SYSTEM YES /app/oracle/oradata/ORCL/system01.dbf2512TEST NO/app/oracle/oradata/ORCL/test01.DBF31170 SYSAUX NO/app/oracle/oradata/ORCL/sysaux01.dbf4335UNDOTBS1 YES /app/oracle/oradata/ORCL/undotbs01.dbf52424 WMSNO/app/oracle/oradata/ORCL/wms01.DBF75USERSNO/app/oracle/oradata/ORCL/users01.dbfList of Temporary Files=======================File Size(MB) Tablespace Maxsize(MB) Tempfile Name---- -------- -------------------- ----------- --------------------132 TEMP 32767 /app/oracle/oradata/ORCL/temp01.dbfRMAN> backup database maxsetsize 3000m format'/app/rmanbak/df_%d_%s_%p.bak';

结果,一个通道产生了多个备份集,每个备份集对一个备份片。

注意:作为基本原则,一个备份集只能占一个通道,一个输入数据文件不能分成多个备份集,所以这里必须满足:最大输入文件size

8.2.5 使用SECTION SIZE子句设置多段备份(multisection backup)

通常一个数据文件只能占用一个通道,如果某个datafile太大,为提高备份效率,可以考虑采用多道关键字SECTION SIZE,并行化这个大文件的备份。例5中的数据文件约500M,被分成若干file section来备份, 它启动了三个通道,每个通道备份300M的file section,但三个通道产生一个备份集,包含两个压缩后的备份片。

例5:

RMAN> RUN{ALLOCATE CHANNEL d1 DEVICE TYPE disk;ALLOCATE CHANNEL d2 DEVICE TYPE disk;ALLOCATE CHANNEL d3 DEVICE TYPE disk;BACKUP AS COMPRESSED BACKUPSET DATAFILE 3 SECTION SIZE 300M format '/app/rmanbak/df_%d_%s_%p.bak';}

注意: SECTION SIZE隐含限定maxpiecesize,当maxpiecesize全局生效时不能使用SECTION SIZE。所以,要使用SECTION SIZE,maxpiecesize只能在allocate channel中说明。(局部参数可以覆盖全局参数)