Oracle RAC 实验环境 RMAN 备份 v1.01
环境:RHEL 6.5 + Oracle GI 11.2.0.4 + RAC 11.2.0.4 (2 nodes)
需求:制定 RAMN 备份策略
版本:v1.01
说明:之前说过本系列的实验环境宗旨就是完全模拟生产环境,所有的操作记录在案,每次版本变更都需要详细记录。
确认备份路径?
备份路径是 NAS 存储的一个目录,通过 NFS 映射过来。
/etc/fstab 增加一行:
- 192.168.1.196:/mnt/HD/HD_a2/Public /public nfs rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,actimeo=0,vers=3,timeo=600
注:这里之所以有很多参数,可参考:《在 NAS 设备上用 NFS 服务为 RAC 数据库和集群件存储 Oracle 文件时的 mount 选项》
然后创建挂载点目录,挂载:
- mkdir /public
- mount -a
备份路径规划为:/public/hotback/jyzhao
- mkdir - p / public / hotback / jyzhao
确认备份策略?
根据我这里测试环境的数据量,制定出如下备份策略:
注:我这里的备份时间都是白天时段,是因为我的实验环境都是白天开启,晚上关机。而如果是 7*24 的生产环境,一般都选择晚上业务闲暇时进行定时备份。
依据之前的文章《Oracle RMAN 备份一例》,根据本实验环境的具体情况进行备份策略和脚本的制定。
备份脚本部署在 RAC 节点 1(192.168.1.50)的 oracle 用户下:
2.1 数据库 0 级备份脚本
vi db0_backup.rman
- #!/bin/bash
- #db0 level backup
- foldername=`date +%Y%m%d`
- BACKUP_BASE=/public/hotback/jyzhao
- cd $BACKUP_BASE
- if [ -d $foldername ]
- then
- echo 'go on'
- else
- echo 'need mkdir'
- mkdir $foldername
- fi
- export ORACLE_BASE=/opt/app/oracle
- export ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1
- export ORACLE_SID=jyzhao1
- export NLS_LANG="simplified chinese_china.ZHS16GBK"
- export NLS_DATE_FORMAT="YYYY-MM-DD HH24:Mi:SS"
- export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32
- export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/sbin:/bin:/usr/sbin:/usr/bin
- rman target / log=$BACKUP_BASE/$foldername/full_LOG.log << RMAN_BACKUP
- run{
- CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
- CONFIGURE CONTROLFILE AUTOBACKUP ON;
- CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$BACKUP_BASE/$foldername/controlfile%F';
- allocate channel c1 device type disk;
- backup incremental level 0 tag 'db0' database format '$BACKUP_BASE/$foldername/db0_%d_%T_%s' include current controlfile;
- delete noprompt obsolete;
- release channel c1;
- }
- RMAN_BACKUP
2.2 数据库归档日志备份脚本
arch_backup.rman
- #!/bin/bash
- #arch backup
- foldername=`date +%Y%m%d`
- BACKUP_BASE=/public/hotback/jyzhao
- cd $BACKUP_BASE
- if [ -d $foldername ]
- then
- echo 'go on'
- else
- echo 'need mkdir'
- mkdir $foldername
- fi
- export ORACLE_BASE=/opt/app/oracle
- export ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1
- export ORACLE_SID=jyzhao1
- export NLS_LANG="simplified chinese_china.ZHS16GBK"
- export NLS_DATE_FORMAT="YYYY-MM-DD HH24:Mi:SS"
- export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32
- export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/sbin:/bin:/usr/sbin:/usr/bin
- rman target / log=$BACKUP_BASE/$foldername/arch_LOG.log << RMAN_BACKUP
- run{
- CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
- allocate channel c1 device type disk;
- sql 'alter system archive log current';
- backup archivelog all delete input format '$BACKUP_BASE/$foldername/arch_%d_%T_%s';
- release channel c1;
- }
- crosscheck archivelog all;
- delete noprompt expired archivelog all;
- RMAN_BACKUP
2.3 删除历史无用文件夹
虽然已经制定了保留策略可以删除历史的陈旧备份,但是由于我这里的备份思路是每天建立一个新的文件夹,那么久而久之就会有很多的文件夹存留,不方便查看和管理,所以这里定期在系统级别删除过期备份的空文件夹。
比如我这里的冗余策略是 3,那么我就删除 5 天以上都没有修改的文件夹,防止误删除有用的备份。
vi del_old.sh
- #!/bin/bash
- #del old folders
- find /public/hotback/jyzhao/. -mtime +5
2.4 赋予以上脚本可执行权限
赋予脚本可执行的权限:
- [oracle@jyrac1 rman_scripts]$ pwd
- /home/oracle/rman_scripts
- [oracle@jyrac1 rman_scripts]$ chmod u+x *
- [oracle@jyrac1 rman_scripts]$ ls -lrth
- total 12K
- -rwxr--r-- 1 oracle oinstall 1.1K Aug 6 17:02 db0_backup.rman
- -rwxr--r-- 1 oracle oinstall 69 Aug 6 17:03 del_old.sh
- -rwxr--r-- 1 oracle oinstall 960 Aug 6 17:17 arch_backup.rman
根据备份策略,编辑定时执行的语句。
- [oracle@jyrac1 ~]$ crontab -l
- 30 11 * * * /home/oracle/rman_scripts/db0_backup.rman > /dev/null 2&>1#
- 0 6,12,18 * * * /home/oracle/rman_scripts/arch_backup.rman > /dev/null 2&>1#
- 0 13 * * * /home/oracle/rman_scripts/del_old.sh > /dev/null 2&>1#
至此完成实验 RAC 环境 RMAN 备份策略的制定。
来源: http://www.linuxidc.com/Linux/2017-08/146098.htm