RMAN备份策略
RMAN备份策略
1 备份效率的考虑
提高备份效率,即提高RMAN性能和吞吐量,相关的参数有并行通道数、输入数据文件数、备份集大小、备份片数等
并行的数目决定了开启通道的个数,当然也可以在RUN{}中指定通道来决定备份与恢复的并行程度。如果在RUN{}中指定了通道配置,将覆盖掉环境配置参数中指定的默认并行度
通常一个通道对应一个备份集
参数影响可有全局和局部两个层次,基本上分为:
PARALLELISM: 保存在RMAN存储库。
CONFIGURE CHANNEL: 更新配置,保存在RMAN存储库。如:RMAN> CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT '/u01/backup/rman/%U.bak';
ALLOCATE CHANNEL: 限于run{},不保存
BACKUP: 限于本次backup语句,不保存
1个channel在一个时刻只能通过一个backupset
1个backupset可以装在多个inputfile(最多64)
1个backupset可以对应多个backup piece
1.1 使用FILESPERSET参数限制备份集中的输入文件数
指定每个备份集中一次可以包含输入文件最大数,该参数默认值为64。如果每个备份集中备份8个文件,数据库有20个文件,那将只生成3个备份集,得到3个备份片,虽然开了4个通道,但并行度是3,有1个通道闲置。例:
RMAN> 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 DATABASE FILESPERSET 8;
}
假如取消ALLOCATE CHANNEL语句,则通道数按全局变量PARALLELISM指定,假定为1,有20个文件,FILESPERSET=8:一个通道干活,8个文件组成一个备份集,每备份集对一个备份片,完成一个备份集再接下一个备份集。串行的跑三趟
1.2 使用MAXPIECESIZE参数限制备份片大小
RMAN> run{
allocate channel c1 device type disk MAXPIECESIZE 300M;
backup datafile 1 format '/u01/backup/rman/%U.bak';
}
限定了最大备份片为300M,如果输出文件是800M(注意不是限制输入文件),则会在一个备份集中生成3个备份片
1.3 使用maxsetsize参数限制备份集大小
RMAN> backup database maxsetsize 800m format '/u01/backup/rman/%U.bak';
一个通道产生了多个备份集,每个备份集对一个备份片
注意:作为基本原则,一个备份集只能占一个通道,一个输入数据文件不能分成多个备份集,所以这里必须满足:最大输入文件size<maxsetsize
1.4 使用SECTION SIZE子句设置多段备份(multisection backup)
通常一个数据文件只能占用一个通道,如何使单一数据文件也能并行备份呢?对于某个较大的datafile,为提高备份效率,可以考虑采用多道关键字SECTION SIZE,并行化这个大文件的备份
使用SECTION SIZE子句设置多段备份(multisection backup)
RMAN> RUN{
ALLOCATE CHANNEL c1 DEVICE TYPE disk;
ALLOCATE CHANNEL c2 DEVICE TYPE disk;
ALLOCATE CHANNEL c3 DEVICE TYPE disk;
BACKUP DATAFILE 1 SECTION SIZE 150M format '/u01/backup/rman/%U.bak';
}
注意:SECTION SIZE隐含限定maxpiecesize,当maxpiecesize全局生效时不能使用SECTION SIZE。(考点)所以,要使用SECTION SIZE,maxpiecesize只能在allocate channel中说明
2 rman增量热备
2.1 rman备份策略
备份策略:每周日执行0级备份,周一至周六每天执行1级增量备份
配置保留策略redundancy 2,开启控制文件自动备份
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
2.2 增量备份脚本
创建存放脚本的目录
mkdir /home/oracle/rman_hot_scripts
创建0级增量备份脚本
vi /home/oracle/scripts/rman_level0.sh
写入:
#!/bin/bash
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_SID=orcl
export
PATH=/u01/app/oracle/product/19.3.0/dbhome_1/bin:/u01/app/oracle/product/19.3.0/dbhome_1/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin
rman target / << EOF
run{
crosscheck backup;
allocate channel c1 device type disk;
allocate channel c2 device type disk;
backup incremental level 0 database format '/u01/backup/rman/db_%U.bak' plus archivelog format '/u01/backup/rman/arch_%U.bak';
backup current controlfile format '/u01/backup/rman/ctl_%U.bak';
report obsolete device type disk;
delete noprompt obsolete device type disk;
delete noprompt expired backup device type disk;
release channel c1;
release channel c2;
}
EOF
exit
创建1级增量备份脚本
vi /home/oracle/scripts/rman_level1.sh
写入:
#!/bin/bash
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_SID=orcl
export
PATH=/u01/app/oracle/product/19.3.0/dbhome_1/bin:/u01/app/oracle/product/19.3.0/dbhome_1/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin
rman target / << EOF
run{
crosscheck backup;
allocate channel c1 device type disk;
allocate channel c2 device type disk;
backup incremental level 1 database format '/u01/backup/rman/db_%U.bak' plus archivelog format '/u01/backup/rman/arch_%U.bak';
backup current controlfile format '/u01/backup/rman/ctl_%U.bak';
report obsolete device type disk;
delete noprompt obsolete device type disk;
delete noprompt expired backup device type disk;
release channel c1;
release channel c2;
}
EOF
exit
chmod a+x /home/oracle/rman_hot_scripts/rman_level0.sh
chmod a+x /home/oracle/rman_hot_scripts/rman_level1.sh
2.3 测试脚本执行
./home/oracle/rman_hot_scripts/rman_level0.sh
./home/oracle/rman_hot_scripts/rman_level1.sh
2.4 编写crontab计划任务
测试环境:整点进行0级备份,每15分钟1级增量备份一次
crontab -e
写入计划任务:
0 * * * * /home/oracle/rman_hot_scripts/rman_level0.sh >> /u01/backup/rman/orcl_rman_L0_`date +\%Y\%m\%d_\%H\%M\%S`.log 2>&1
15,30,45 * * * * /home/oracle/rman_hot_scripts/rman_level1.sh >> /u01/backup/rman/orcl_rman_L1_`date +\%Y\%m\%d_\%H\%M\%S`.log 2>&1
时间格式如下:
f1 f2 f3 f4 f5 program
* * * * *
- - - - -
| | | | |
| | | | +-------- 星期中星期几 (0 - 6) (星期天为0)
| | | +------------ 月份 (1 - 12)
| | +---------------- 一个月中的第几天 (1 - 31)
| +------------------- 小时 (0 - 23)
+----------------------- 分钟 (0 - 59)
查看备份情况是否正常,查看相关备份日志,查看obsolete备份、归档是否删除正常