Oracle RMAN 备份脚本
说明
RMAN备份是每个正常数据库要部署的。
如下脚本经生产环境测试,实现全库备份。数据库恢复窗口3天。
部署
以oracle执行
建立备份目录/u02/rmanbackup
$mkdir -p /u02/rmanbackup
把此脚本fullbak.sh保存到/home/oracle/scripts目录。
chmod +x fullbak.sh
设置每周日3点备份
0 3 * * 7 /home/oracle/scripts/fullbak.sh >/dev/null 2>&1
脚本
#!/bin/sh
#需要修改的参数1. RMANBAK. rman备份存放目录 ,缺省/u02/rmanbackup.
# 2. RECO_DAY (recovery day) 恢复窗口,缺省 3天。source ~/.bash_profile#export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4
#export ORACLE_SID=orcl
export RMANBAK=/u02/rmanbackup
export RECO_DAY=3export DATE=`date +%Y-%m-%d`
export LOGFILE=$RMANBAK/logs/rman_full_`date +%Y-%m-%d-%H%M`.log
export CMDFILE=/tmp/fullbak.rcvif [ ! -d $RMANBAK ]; thenmkdir $RMANBAK
fiif [ ! -d $RMANBAK/logs ]; thenmkdir $RMANBAK/logs
ficat > $CMDFILE <<EOF
connect target /
run{
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$RMANBAK/auto_%T_%F.%d';
configure RETENTION POLICY TO recovery window of $RECO_DAY days;
allocate channel ch00 device type disk;
allocate channel ch01 device type disk;
allocate channel ch02 device type disk;
allocate channel ch03 device type disk;crosscheck copy;
crosscheck backup;
crosscheck archivelog all;delete noprompt expired archivelog all;
delete noprompt expired backup;
report obsolete;
delete noprompt obsolete;backup as compressed backupset incremental level 0 database format '$RMANBAK/full_%T_%u_%p.%d' tag='FULLDB-$DATE'
plus archivelog format '$RMANBAK/arch_%T_%u_%p.%d' tag='ARCH-$DATE' delete all input ;crosscheck copy;
crosscheck backup;
crosscheck archivelog all;delete noprompt expired archivelog all;
delete noprompt expired backup;
report obsolete;
delete noprompt obsolete;delete noprompt force copy completed before 'sysdate-8';
delete noprompt force archivelog all completed before 'sysdate-8' ;
delete noprompt force backupset completed before 'sysdate-8' ;
release channel ch00;
release channel ch01;
release channel ch02;
release channel ch03;
}
EOF########################################################################echo "started backup at : "`date +%Y%m%d-%H%M` >> $LOGFILE
echo "---------------------------------------------------">>$LOGFILE
$ORACLE_HOME/bin/rman @$CMDFILE log $LOGFILE append
echo "---------------------------------------------------">>$LOGFILE
echo "finished backup at: "`date +%Y%m%d-%H%M` >> $LOGFILE