DG环境数据库RMAN备份策略制定:
主库(Primary)
- 全库备份
- 归档备份
- 删除历史文件夹
备库(Standby)
- 删除归档
引用说明
主库(Primary)
$ crontab -l
0 1 * * * /bin/bash /usr2/backupsh/full_backup.rman
0 */2 * * * /bin/bash /usr2/backupsh/arch_backup.rman
0 3 * * * /bin/bash /usr2/backupsh/del_old.sh
全库备份
more /usr2/backupsh/full_backup.rman
#!/bin/bash
#Make sure your bkdir and change it!
bkdir=/usr2/BACKUP
foldername=`date +%Y%m%d`
mkdir -p $bkdir
cd $bkdir
if [ -d $foldername ]
then
echo 'go on'
else
echo 'need mkdir'
mkdir $foldername
fi
#oracle environment
export ORACLE_SID=jyzhao
export ORACLE_BASE=/opt/app/oracle
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=$bkdir/$foldername/LOG_full_$foldername.log <
归档备份
more /usr2/backupsh/arch_backup.rman
#!/bin/bash
#Make sure your bkdir and change it!
bkdir=/usr2/BACKUP
foldername=`date +%Y%m%d`
mkdir -p $bkdir
cd $bkdir
if [ -d $foldername ]
then
echo 'go on'
else
echo 'need mkdir'
mkdir $foldername
fi
#oracle environment
export ORACLE_SID=jyzhao
export ORACLE_BASE=/opt/app/oracle
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=$bkdir/$foldername/LOG_arch_$foldername.log append <
删除历史文件夹
more /usr2/backupsh/del_old.sh
#!/bin/bash
#del old folders
#Make sure your bkdir and change it!
bkdir=/usr2/BACKUP
cd $bkdir && find . -mtime +7 | xargs rm -rf
备库(Standby)
$ crontab -l
0 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 -rt $ARCHIVE_DIR/ |grep -v JYZHAO_S| head -1|cut -f4 -d_|cut -f1 -d.`
$ORACLE_HOME/bin/sqlplus -silent "/ as sysdba" <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个归档文件,这个具体情况自己决定
while [[ ${del_seq} -lt ${max_sn} ]]
do
echo "${ARCHIVE_DIR}/arch_874084675_1_${del_seq}.arc">>$LOG_FILE
rm ${ARCHIVE_DIR}/arch_874084675_1_${del_seq}.arc
#这里是我定义归档文件的格式,具体根据自己的归档文件格式来匹配,关键是匹配日志的sequence no。
del_seq=$(( $del_seq + 1 ))
done
echo "删除归档日志结束:`date`……">>$LOG_FILE
#清楚controlfile中信息
$ORACLE_HOME/bin/rman target / <>$LOG_FILE
crosscheck archivelog all;
delete expired archivelog all;
YES
exit;
XIFENFEI
echo "………………………………………………………………………………………………………………………">>$LOG_FILE
引用说明
备库删除归档的脚本参考于惜分飞的博客,原地址如下:
http://www.xifenfei.com/1144.html
原文说到重点是在读取现在存在的归档日志文件中sequence最小值时,
使用了ls -tr $ARCHIVE_DIR/|grep -v stdarch | head -1|cut -f2 -d_
而我这里就根据实际情况改成:ls -rt $ARCHIVE_DIR/ |grep -v JYZHAO_S| head -1|cut -f4 -d_|cut -f1 -d.