DG环境数据库RMAN备份策略制定: 主库(Primary)全库备份 归档备份 删除历史文件夹 备库(Standby)删除归档 引用说明主库(Primary) $ crontab -l0 1 * * * /usr2/backupsh/full_backup.rman 0 */2 * * * /usr2/backupsh/arch_backup.rman 0 3 * * * /usr2/backupsh/del_old.sh全库备份 more /usr2/backupsh/full_backup.rman#!/bin/bash foldername=`date +%Y%m%d` cd /usr2/BACKUP if [ -d $foldername ] then echo "go on" else echo "need mkdir" mkdir $foldername fiexport Oracle_SID=jyzhao export ORACLE_BASE=/opt/app export ORACLE_HOME=/opt/app/oracle/product/11.2.0/db_1 export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin #export LD_LIBRARY_PATH=$ORACLE_HOME/lib #export NLS_LANG="simplified chinese_china.ZHS16GBK" #export NLS_DATE_FORMAT="YYYY-MM-DD HH24:Mi:SS"rman target / log=/usr2/BACKUP/$foldername/LOG_full_$foldername.log <<EOF run{ configure retention policy to recovery window of 5 days; configure controlfile autobackup on; configure controlfile autobackup format for device type disk to "/usr2/BACKUP/$foldername/controlfile%F"; CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY; 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 skip inaccessible backup incremental level=0 database format "/usr2/BACKUP/$foldername/full_BACK_%U"; release channel c1; release channel c2; release channel c3; release channel c4; } allocate channel for maintenance device type disk; crosscheck backupset; delete noprompt expired backupset; delete noprompt obsolete; exit EOF归档备份 more /usr2/backupsh/arch_backup.rman#!/bin/bash foldername=`date +%Y%m%d` cd /usr2/BACKUP if [ -d $foldername ] then echo "go on" else echo "need mkdir" mkdir $foldername fiexport ORACLE_SID=jyzhao export ORACLE_BASE=/opt/app export ORACLE_HOME=/opt/app/oracle/product/11.2.0/db_1 export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin #export LD_LIBRARY_PATH=$ORACLE_HOME/lib #export NLS_LANG="simplified chinese_china.ZHS16GBK" #export NLS_DATE_FORMAT="YYYY-MM-DD HH24:Mi:SS"rman target / log=/usr2/BACKUP/$foldername/LOG_arch_$foldername.log append <<EOF run{ configure retention policy to recovery window of 5 days; configure controlfile autobackup on; configure controlfile autobackup format for device type disk to "/usr2/BACKUP/$foldername/controlfile%F"; CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY; 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 skip inaccessible backup archivelog all delete input format "/usr2/BACKUP/$foldername/arch_BACK_%U"; release channel c1; release channel c2; release channel c3; release channel c4; } allocate channel for maintenance device type disk; crosscheck backupset; delete noprompt expired backupset; delete noprompt obsolete; exit EOF删除历史文件夹 more /usr2/backupsh/del_old.sh#!/bin/bash #del old folders cd /usr2/BACKUP find . -mtime +7 | xargs rm -rf备库(Standby) $ crontab -l0 3 * * * /usr2/del_arch/del_arch.sh删除归档 more /usr2/del_arch/del_arch.sh#!/bin/bash export ORACLE_SID=jyzhao_s export ORACLE_HOME=/opt/app/oracle/product/11.2.0/db_1 export ARCHIVE_DIR=/usr2/oradata/archivelog export LOG_FILE=/usr2/oradata/archivelog/del_archive.log
echo "开始删除归档日志:`date`……">>$LOG_FILE if [ `whoami` != "oracle" ] then echo "Error: You must be oracle to execute.">>$LOG_FILE exit 99 fi
del_seq=`ls -tr $ARCHIVE_DIR/|grep -v stdarch | head -1|cut -f2 -d_` $ORACLE_HOME/bin/sqlplus -silent "/ as sysdba" <<XFF>tmp.log set pagesize 0 feedback off verify off heading off echo off select max(sequence#) from v$ARCHIVED_LOG where APPLIED="YES"; exit; XFF max_sn=`cat tmp.log` rm tmp.log max_sn=$(( $max_sn - 20 )) #我这里是保留最近的20个归档文件,这个具体情况自己决定