第4章 恢复管理器(RMAN)

体系结构

export ORACLE_SID=hisdb
rman target sys/oracle

#远程登陆 TNS连接  test是TNS连接串
rman target sys/oracle@test

#远程登陆 IP连接   hisdb是服务名
rman target sys/oracle@192.168.133.15:1521/hisdb

#查询session信息
select SID,SERIAL#,MODULE,ACTION from v$session where module like '%rman%'

非归档模式下,RMAN只能在mount状态下使用,无法再open下使用。

只要1号数据文件被备份,RMAN就会自动备份控制文件和参数文件。

RMAN命令连接上后系统会产生两个会话,一个是主会话,一个是监控会话。

RMAN通道是除了主会话和监控会话以外的会话,一个通道对应一个服务器进程,对应一个会话。

RMAN资料库记录了RMAN备份的位置和其他相关信息,可以保存在目标数据库的控制文件或者恢复编录中。

RMAN对坏块是0容忍,一旦有坏块,立马停止,报ORA-19566错。

快速恢复区

快速恢复区是一个默认放置所有和备份恢复操作有关的文件的地方,是RMAN备份默认的磁盘保存地点,最好与数据库的控制文件、在线日志、数据文件使用物理上格力的存储设备,并要预留足够的磁盘空间,至少大于整个数据库。

快速恢复区中的文件分为永久性文件(不会被自动删除)和短期性文件(符合条件情况下自动删除)

  • archivelog:归档日志,短期性
  • autobackup:控制文件自动备份,短期性
  • controlfile:当前控制文件镜像,永久性
  • datafile:数据文件镜像,短期性
  • backupset:RMAN备份片,短期性
  • onlinelog:在线日志镜像,永久性
  • flashback:闪回日志,短期性
#快速恢复区空间设置(放置在快速恢复区内的文件大小累加不允许超过10G)
#文件本身的大小比Oracle系统中识别到的要大,因为Oracle不使用文件的第一个块
alter system set db_recovery_file_dest_size='10G';

#快速恢复区路径设置
alter system set db_recovery_file_dest='/FRA';

#查看空间利用情况
select * from v$flash_recovery_area_usage;
#查看当前归档路径
select name,value from v$parameter where regexp_like(name,'log_archive_dest_[1-9]{1,2}') and ismodified<>'FALSE';

#将归档日志存入快速恢复区,恢复初始化参数log_archive_dest_n的出厂设置
#注意:不能将其显示设置为空
alter system reset log_archive_dest_1

#重启数据库
shutdown immediate;
startup;

#切换在线日志
alter system switch logfile;

#检查归档日志保存地点
select stamp,name,sequence# from v$archived_log order by sequence# desc

#查看空间利用情况
select * from v$flash_recovery_area_usage;

通道分配

#查看自动通道设备类型,一般是DISK
show default device type;

#查看所有可用的设备类型,默认情况下并行度是1
show device type;

#查看所有已配置的通道,默认情况为空,没有配置
show channel;

#设置通道数为2
configure device type disk parallelism 2;

#设置通道默认路径
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/%U';

#设置通道模板,设置备份片大小上限为2G,对所有通道生效
configure channel device type disk maxpiecesize 2G;

#设置通道1的备份路径
configure channel 1 device type disk to destination '/backup/disk1';

#设置通道2的备份路径
configure channel 2 device type disk to destination '/backup/disk2';

假如设置了2个通道数,需要备份的表空间users只包含1个文件user01.dbf,则2个通道处理一个文件,其中1个不工作,虽然设置了2个通道,但是并行度只有1。所以通道数>=并行度。

#备份users表空间
#to destination可省略,默认路径是快速恢复区,没有设置快速恢复区时路径为$ORACLE_HOME/dbs目录
#使用to destination命令就是OMF命名方式
backup tablespace users to destination '/fra/test1';
#piece handle=/fra/test1/HISDB/backupset/2024_05_17/o1_mf_nnndf_TAG20240517T160819_m4g43m9j_.bkp tag=TAG20240517T160819 comment=NONE

#传统命名方式
backup tablespace users format '/fra/test1/%d_%T_%s_%p.bak';
#piece handle=/fra/test1/HISDB_20240517_21_1.bak tag=TAG20240517T160902 comment=NONE


#创建测试表空间
CREATE TABLESPACE example 
DATAFILE '/fra/example.dbf' 
SIZE 100M 
AUTOEXTEND ON NEXT 10M MAXSIZE 500M 
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
#手动配置2个通道,分别备份example和users表空间到不同的目录
run{
allocate channel c1 device type disk to destination '/fra/test1';
allocate channel c2 device type disk to destination '/fra/test2';
backup as backupset
(tablespace example channel c1)
(tablespace users channel c2);
}
#恢复DISK设备默认配置
configure channel 1 device type disk clear;
configure channel 2 device type disk clear;
configure channel device type disk clear;
configure device type disk clear;
configure default device type clear;

备份集备份

输入文件:备份的对象

  • 控制文件
  • 参数文件
  • 数据文件
  • 归档日志

备份集就是输入文件的备份,物理上由备份片组成

备份片是一种由RMAN管理的文件,一个备份片可以包含多个输入文件,一个输入文件也可以分散在多个备份片中。只要使用快速恢复区或者to destination命令就是OMF命名方式。

OMF命名方式7~11共5个字符,含义如下:

  • a--归档日志
  • c--控制文件
  • s--参数文件
  • d--数据文件
  • f--除归档日志以外的任何文件

影响备份集数量的因素

  • 一个备份集至少包含一个输入文件,一个输入文件只能在一个备份集中。
  • 若一次备份的输入文件有20个,使用了4个并行度,结果至少产生4个备份集。如果输入文件只有3个,使用了4个通道,并行度也只有3。
  • 数据文件、归档日志占用单独的备份集,控制文件和参数文件可以合用备份集。
  • 不在同一个小括号内的输入文件一定不在同一个备份集中。
  • 若备份时使用了plus archivelog,RMAN会做一个归档收尾,即切换在线日志--归档该日志--备份该归档日志,所以会出现一个只有一个归档日志的备份集。
#2个通道,users表空间有2个数据文件时产生2个备份集
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
backup as backupset tablespace users;
}

#备份1号数据文件时,RMAN会自动备份控制文件和参数文件,此时产生2个备份集
run{
allocate channel c1 device type disk;
backup as backupset datafile 1;
}

#小括号隔离,此时产生2个备份集
run{
allocate channel c1 device type disk;
backup (datafile 5) (datafile 6);
}

#3个通道,3个输入文件,此时产生3个备份集
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
backup (datafile 5,6) (datafile 4);
}

#3个通道,3个输入文件,括号内显式指派了通道,此时产生2个备份集
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
backup (datafile 5,6 channel c1) (datafile 4 channel c2);
}

多路传输:一个通道中,RMAN同时读取多个输入文件的数据并将其写入同一个备份片。

读取的输入文件数量为多路传输等级,该值为以下三个数中的最小值

  • 通道的maxopenfiles
  • 通道的输入文件数
  • 64或backup命令的filesperset
#maxopenfiles=2,filesperset没设置=64,通道输入文件=6,取三者最小值2
run{
allocate channel c1 device type disk maxopenfiles 2;
backup database;
}

RMAN增量备份

优点在于产生的备份片较小,恢复速度比归档日志快。

backup 命令的 incremental 可以产生3种增量备份集:

  • 等级0增量备份:是增量备份的基准备份,备份量与全备相同
  • 等级1累计增量备份:只与等级0增量备份比较,产生的备份片较大,但恢复速度快
  • 等级1差异增量备份:与等级0增量备份和等级1增量(不管是累计还是差异)备份比较,产生的备份片较小,恢复速度慢
#0级增量
backup incremental level 0 database;

#1级累计增量
backup cumulative incremental level 1 database;

#1级差异增量
backup incremental level 1 database;

镜像复制备份

类似直接使用操作系统命令复制文件,镜像复制的数量和大小与输入文件一模一样,可大大缩短还原操作时间,只需要重命名到相应路径。

RMAN无法对参数文件进行镜像复制备份。

#设置备份类型为镜像复制
configure device type disk backup type to copy;

#备份数据库
backup database;

#备份数据文件
backup datafile 1,2;

#备份控制文件
backup as copy current controlfile;

#显示备份为镜像复制
run{
allocate channel c1 device type disk to destination '/backup';
allocate channel c2 device type disk to destination '/backup';
backup as copy
(datafile '/u01/data/TESTDB/system01.dbf' channel c1)
(datafile '/u01/data/TESTDB/undotbs01.dbf' channel c2);
}

#镜像复制完成后检查备份中是否有坏块,如果有的话可以查看trace文件定位坏块编号
RMAN> validate datafilecopy all;

#删除无用的镜像复制
RMAN> delete noprompt datafilecopy 66;

★ RMAN的优化

备份集优化

备份集压缩方式:

  • 空块压缩
  • 未使用块压缩
  • 二进制压缩
#配置RMAN压缩 4个级别:LOW、BASIC、MEDIUM、HIGH
configure compression algorithm 'LOW';

#对某个大的数据文件,可以使用多个通道对其进行并行备份
#以下命令得到1个备份集,4个备份片,将1号文件按200MB单位分割交给4个通道用4个并行度备份
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
allocate channel c4 device type disk;
backup section size 200M datafile 1;
}

#相关视图查询,blocks_read与datafile_blocks比值越小说明增量备份效率越高,接近1则增量备份没有意义,应当全备
select file#,sum(blocks_read)*1.0/sum(datafile_blocks) ratio from v$backup_datafile where incremental_level >0 group by file#;

镜像复制优化

#第一天执行以下命令得到一个整个数据库所有文件的镜像复制,标记为FLASH
backup incremental level 1 for recover of copy with tag 'FLASH' database;

#第二天先执行相同的命令得到一个以FLASH镜像为基础的等级1增量备份
backup incremental level 1 for recover of copy with tag 'FLASH' database;

#第二天后执行以下命令,RMAN会使用增量备份恢复标签为FLASH的数据库镜像,即更新镜像复制
recover copy of database with tag 'FLASH';

#以后每天都先后执行第2和第3条命令,就能获得一个最新的数据库镜像复制

RMAN备份的加密

加密方式:

  • 透明模式
  • 口令模式
  • 双体模式
#仅演示口令模式,其他两种模式见书本81页
#使用密码abc123加密备份文件
set encryption on identified by "abc123" only;
backup tablespace users;

#在使用restore命令还原操作前通过set decryption生命正确的密码
set decryption on identified by "abc123";

备份保留策略

如果RMAN认为某个备份需要保留,则该备份之后产生的所有归档日志也必须保留。

备份冗余度指同一文件(控制文件和数据文件)的备份数量。

将冗余度设为2,表示控制文件和所有数据文件需要保留2分全备份及其后产生的所有归档日志。

恢复窗口保留策略需设置一个以天为单位的时间窗口,假设为3天,表示两次全备的间隔不能超过3天,且3天边界以内的全部及边界以外的最近一次备份及之后产生的归档日志受策略保护,其余的可以被删除。

#将冗余度设为2
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

#查询有哪些数据文件需要保留
report need backup;

#查看不受保留策略保护、已废弃的备份和归档日志
#delete obsolete命令可以将其删除,快速恢复区空间不足也会被自动删除
report obsolete;

#删除不受保留策略保护、已废弃的备份和归档日志
delete noprompt obsolete device type disk;

RMAN资料库

#查看尚未备份的所有归档日志
list archivelog all;

#查看所有备份集
list backupset;

#查看数据文件镜像复制
list datafilecopy all;

#查看数据文件、控制文件、归档日志的镜像复制
list copy;

#查看控制文件的备份集备份
list backupset of controlfile;

#查看控制文件的镜像复制
list copy of controlfile;

#查看表空间的备份集
list backupset of tablespace users;

#查看特定编号数据文件的备份集
list backupset of datafile 1,3,5;

#查看数据库的备份集
list backupset of database;

#报告当前数据文件结构
report schema;

#列出4天没有备份的数据文件
report need backup days 4;

#列出恢复路径需超过4个等级1增量备份的数据文件
report need backup incremental 4;

#列出备份冗余度未达到4的数据文件
report need backup redundancy 4;

#列出特定表空间中需要备份的数据文件
report need backup tablespace users,system;

注意:使用操作系统命令删除备份文件后可能会导致RMAN的误判,建议在list和report命令前加上crosscheck命令校验资料库中记录的真实性。

#校验资料库中记录的真实性,被删除的文件状态为EXPIRED
crosscheck backupset device type disk;

#清除已过期的信息
delete noprompt expired backupset;

第1章 重做日志(Redo Log)

第2章 控制文件(Control File)

第3章 补充日志(Supplemental Logging)

第4章 恢复管理器(RMAN)

第5章 恢复编录(Recovery Catalog)

第6章 数据泵(Data Pump)

第7章 参数文件的备份与还原

第8章 控制文件的备份与恢复

第9章 关键数据文件备份与恢复

第10章 普通数据文件备份与恢复

第11章 只读数据文件备份与恢复

第12章 不完全数据库恢复

第13章 无备份情况下的恢复

第14章 闪回技术(Flashback)

第15章 恢复受损的数据块