目录
1.RMAN的概述
2.RMAN定时全库备份配置
3.恢复操作
RMAN 是一种用于集备份(backup)、还原(restore)和恢复(recover)数据库于一体的 Oracle 工具,
能够备份整个数据库、表空间、数据文件、控制文件、归档文件以及 Spfile 参数文件。
注意:需要开启归档
RMAN对以下文件不能备份
1)口令文件
2)在线日志(redo)
3) 网络配置文件
4)告警文件(alert日志)、跟踪文件
/u01/app/oracle/diag/rdbms/orcl/orcl/trace
5)闪回日志
6)临时数据文件,临时表空间等
RMAN 支持增量数据块级别的备份和块级别的介质恢复,可以保存频繁执行的备份恢复脚本,可以实现数据库的克隆、使用 RMAN 建立备用数据库,支持镜像
备份与备份集,可以备份到磁盘与磁带,可增加备份并发度或限制 I/O 减少备份给数据库带来的影响,在备份期间检查损坏的数据块,支持在备份期间使用压缩
特性来减少磁盘空间的占用。
2.RMAN 组件
1)rman所在位置:$ORACLE_HOME/bin。
2)目标数据库:目标数据库指想要备份、还原与恢复的数据库。
rman target /
rman target '"sys/oracle as sysdba"'
rman target '"sys/[email protected]:1521/pdb2 as sysdba"'
3)服务器通道(进程)
通道简言之即是完成文件复制工作的的服务器进程,多通道则实现了并行执行操作,可以自动或手动分配通道,
一旦备份与还原操作启动,则 RMAN会根据配置启用一个或多个通道。
4)存储仓库
存储了与目标数据库及其备份相关的元数据,包含目标数据库物理结构的详细信息、数据文件的位置,已完成的所有备份的细节,
RMAN 的永久配置信息,存储仓库始终被存储在目标数据库的控制文件内,或存储在恢复目录内(一个单独的 Oracle 数据库)
5)恢复目录catalog(DG\ADG)
可以将目标数据库的备份恢复,元数据等相关信息写入到一个单独的数
据库,这个单独的数据库即为恢复目录,恢复目录可以存储 RMAN 脚本
6)备份目的地
默认的备份目的地为闪回区,$ORACLE_BASE/fast_recovery_area/,可以设置参
数 db_recovery_file_dest 参数和 db_recovery_file_size 进行调整。
RMAN> backup datafile 1 format '/home/oracle/%U';
3.FORMAT 字符串替代变量
注:如果在 BACKUP 命令中没有指定 FORMAT 选项,则 RMAN 默认使用%U为备份 片段命名
使用 FORMAT 参数时可使用的各种替换变量,如下:
%c:备份片的拷贝数(从 1 开始编号);
%d:数据库名称;
%D:位于该月中的天数(DD);
%M:位于该年中的月份(MM);
%F:一个基于 DBID 唯一的名称,这个格式的形式为
c-IIIIIIIIII-YYYYMMDD-QQ,其中 IIIIIIIIII 为该数据库的 DBID,
YYYYMMDD 为日期,QQ 是一个 1-256 的序列;
%n:数据库名称,并且会在右侧用 x 字符进行填充,使其保持长度为 8;
%u:是一个由备份集编号和建立时间压缩后组成的 8 字符名称。利用%u 可以为每个备 份集生成一个唯一的名称;
%p:表示备份集中备份片段的编号,从 1 开始编号;
%U:是%u_%p_%c 的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一 个唯一名称,这是最常用的命名方式;
%s:备份集的号;
%t:备份集时间戳;
%T:年月日格式(YYYYMMDD);
4.备份的工作机制
备份的大体上分为:全备和增备,前提必须要有全备,既0级备份。
所谓增量备份,顾名思义即是每次备份仅操作那些发生了"变化"的数据块
RMAN中增量备份有两种:Differential差异方式和 Cumulative累积方式,级别 0-4
1)差异备份 Differential (DEFUALT):备份上级及同级以来所有变化的数据块
2)累积增量备份 Cumulative备份上级以来所有变化的数据块
1)编辑全备脚本,脚本中oracle_home 与rman路径以实际为主。
vi /u01/dbbak/script/rman_full.sh
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1
export ORACLE_SID=orcl
dt=`date '+%Y%m%d_%H%M'`
/u01/app/oracle/product/19.3.0/db_1/bin/rman target / cmdfile=/u01/dbbak/script/backup.sh log=/u01/dbbak/log/log_$dt.log append
2)编辑备份脚本
vi /u01/dbbak/script/backup.sh
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
backup as compressed backupset database format '/u01/dbbak/db/DB%U.bkp' plus archivelog format '/u01/dbbak/arch/ARCH%U.bkp' delete all input;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
report obsolete;
crosscheck copy;
crosscheck archivelog all;
delete noprompt obsolete;
crosscheck backup;
delete noprompt expired backup;
}
quit;
EOF
3)脚本授权
[oracle@OEL7 dbbak]$ chmod 775 -R script/*
4)执行脚本
/u01/dbbak/script/rman_full.sh
5)定时任务
crontab -e 为编辑窗口
[oracle@OEL7 ~]$ crontab -l
0 2 * * * /u01/dbbak/script/rman_full.sh
数据恢复需要在RMAN模式下
3.1全库恢复
数据库需要处于MOUNT模式才能进行下面的恢复。
3.1 RMAN > restore database; 用于恢复数据文件
3.2 RMAN > recover database; 应用归档日志恢复数据
3.2.恢复数据文件
run
{
allocate channel ch1 device type DISK ;
set newname for datafile 3 to '/u01/app/oracle/oradata/ORCL/test/sysaux01.dbf';
restore datafile 3;
switch datafile all;
recover datafile 3;
alter database open;
select * from v$datafile;
release channel ch1;
}
3.3.恢复表空间
restore tablespace users;
recover tablespace users;
3.4.恢复参数文件、控制文件和归档日志文件
restore spfile from
'/u01/app/oracle/fast_recovery_area/ORCL/autobackup/2021_07_11/o1_mf_s_1077640135_jgoby7wm_.bkp';
restore controlfile from autobackup;
restore archivelog sequence between 1 and 2;
restore archivelog from logseq=31;
restore archivelog all;
3.5.恢复 CDB & PDB 数据库
restore database root;
recover database root;
restore pluggable database orclpdb2;
recover pluggable database orclpdb2;