Oracle RAC 實驗環境RMAN備份v1.01


Oracle RAC 實驗環境RMAN備份v1.01

環境:RHEL 6.5 + Oracle GI 11.2.0.4 + RAC 11.2.0.4 (2 nodes)
需求:制定RAMN備份策略
版本:v1.01
說明:之前說過本系列的實驗環境宗旨就是完全模擬生產環境,所有的操作記錄在案,每次版本變更都需要詳細記錄。

1.前期准備

確認備份路徑?
備份路徑是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

確認備份策略?
根據我這里測試環境的數據量,制定出如下備份策略:

  • 制定備份保留策略為保留最近的3份備份
  • 每天11:30進行0級全備,刪除保留策略之外的陳舊備份
  • 每天6:00、12:00、18:00進行歸檔日志備份
  • 每天13:00刪除備份目錄下的陳舊備份文件夾

注:我這里的備份時間都是白天時段,是因為我的實驗環境都是白天開啟,晚上關機。而如果是7*24的生產環境,一般都選擇晚上業務閑暇時進行定時備份。

2.備份腳本

依據之前的文章[《Oracle RMAN 備份一例》](http://www.cnblogs.com/jyzhao/p/3809099.html),根據本實驗環境的具體情況進行備份策略和腳本的制定。 備份腳本部署在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

3.定時執行

根據備份策略,編輯定時執行的語句。
[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備份策略的制定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM