oracle 11.2.0.3 rac集群rman周备份策略

1.1备份策略
周日执行0级的增量备份

周一执行2级的增量备份

周二执行2级的增量备份

周三执行1级的增量备份

周四执行2级的增量备份

周五执行2级的增量备份

周六执行2级的增量备份
周日进行一次零级备份,周一、周二、进行二级备份;周三进行一级备份;周四、周五、周六进行二级备份。在执行备份的时候,我们考 虑将数据文件的全备和归档日志备份分开执行,避免造成一些不必要的麻烦。在进行全备的时候,由于RAC的两个节点是共享的所有数据文件,控制文件,所以我 们只连接其中的一个节点rac1来进行备份。在进行归档日志的备份的时候,由于归档日志并非共享,而是在每个节点本地存储的,所以我们需要分别连接到两个节 点进行归档日志的备份。为节省存储空间,将对备份后归档日志做定期删除。

2.数据库备份脚本
2.1 零级备份脚步(即全备)
0级脚本如下: 

cat >> /home/oracle/fullbackup/backup_lv0.sql <

run{ 

allocate channel c1 type disk maxpiecesize=3500m; 

allocate channel c2 type disk maxpiecesize=3500m; 

backup incremental level 0 database include current controlfile format ‘+DATA/frxdb/backupset/frxdb_%T_%s_%p.lv0‘ plus archivelog delete all input format ‘+DATA/frxdb/backupset/arch_%T_%s_%p.arc‘; 

release channel c1; 

release channel c2; 

}

 EOF  

2.2 一级脚本如下: 
cat >> /home/oracle/fullbackup/backup_lv1.sql <

run {

allocate channel c1 type disk maxpiecesize=3500m; 

backup incremental level 1 database include current controlfile format ‘+DATA/frxdb/backupset/frxdb_%T_%s_%p.lv1‘; 

release channel c1; 

} 

EOF  

2.3 二级脚本如下: 
cat >> /home/oracle/fullbackup/backup_lv2.sql <

run{

allocate channel c1 type disk maxpiecesize=3500m; 

backup incremental level 2 database include current controlfile format ‘+DATA/frxdb/backupset/frxdb_%T_%s_%p.lv2‘; 

release channel c1; 

} 

EOF

3 自动备份
3.1 自动备份脚本
########################################################################

##   rac__backup.sh      ##

##   created by ZHONGYI TECH   ##

##        2014-6-23                 ##

#########################################################################

 

#!/bin/sh 

export LANG=en_US

BACKUP_DATE=`date +%d`

RMAN_LOG_FILE=${0).out

TODAY=`date`

CUSER=`id|cut -d "(" -f2|cut -d ")" -f1`

echo "-----------------$TODAY-------------------">$RMAN_LOG_FILE

ORACLE_HOME=/u01/app/oracle/product/11.2.0.3/db_1

export ORACLE_HOME

RMAN=$ORACLE_HOME/bin/rman

export RMAN

ORACLE_SID=frxdb

export ORACLE_SID

ORACLE_USER=oracle

export ORACLE_USER

 

echo "ORACLE_SID: $ORACLE_SID">>$RMAN_LOG_FILE

echo "ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILE

echo "ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILE

echo "==========================================">>$RMAN_LOG_FILE

echo "BACKUP DATABASE BEGIN......">>$RMAN_LOG_FILE

echo "                   ">>$RMAN_LOG_FILE

chmod 666 $RMAN_LOG_FILE

 

WEEK_DAILY=`date +%a`

 

case  "$WEEK_DAILY" in

       "Mon")

            BAK_LEVEL=2

            ;;

       "Tue")

            BAK_LEVEL=2

            ;;

       "Wed")

            BAK_LEVEL=1

            ;;

       "Thu")

            BAK_LEVEL=2

            ;;

       "Fri")

            BAK_LEVEL=2

            ;;

       "Sat")

            BAK_LEVEL=2

            ;;

       "Sun")

            BAK_LEVEL=0

            ;;

       "*")

            BAK_LEVEL=error

esac

export  BAK_LEVEL=$BAK_LEVEL 

echo "Today is : $WEEK_DAILY  incremental level= $BAK_LEVEL">>$RMAN_LOG_FILE

 

RUN_STR="

BAK_LEVEL=$BAK_LEVEL

export BAK_LEVEL

ORACLE_HOME=$ORACLE_HOME

export ORACLE_HOME

ORACLE_SID=$ORACLE_SID

export ORACLE_SID

$RMAN  nocatalog TARGET sys/   msglog $RMAN_LOG_FILE append <

run

{

allocate channel c1  type disk connect  ‘sys/‘;

allocate channel c2  type disk connect  ‘sys/‘;

 

backup  incremental level= $BAK_LEVEL Database format=‘+DATA/frxdb/backupset/frxdb_lev"$BAK_LEVEL"_%U_%T‘  tag=‘frxdb_lev"$BAK_LEVEL"‘ ;

 

sql ‘alter system archive log current‘;

 

backup archivelog all tag=‘arc_bak‘ format=‘+DATA/frxdb/backupset/arch_%U_%T‘  not  backed up 1 times  delete input;

 

backup current controlfile tag=‘bak_ctlfile‘ format=‘+DATA/frxdb/backupset/ctl_file_%U_%T‘;

backup spfile tag=‘spfile‘ format=‘+DATA/frxdb/backupset/frxdb_spfile_%U_%T‘;

release channel c1;

release channel c2;

}

allocate channel for maintenance device type disk connect  ‘sys/‘;

allocate channel for maintenance device type disk connect  ‘sys/‘;

 

report obsolete; 

delete noprompt obsolete; 

crosscheck backup; 

delete noprompt expired backup;

Release channel;

list backup summary; 

 

EOF

"

 # Initiate the command string 

 

if [ "$CUSER" = "root" ] 

then 

    echo "Root Command String: $RUN_STR" >> $RMAN_LOG_FILE     

    su - $ORACLE_USER -c "$RUN_STR" >> $RMAN_LOG_FILE 

    RSTAT=$? 

else 

    echo "User Command String: $RUN_STR" >> $RMAN_LOG_FILE     

    /bin/sh -c "$RUN_STR" >> $RMAN_LOG_FILE 

    RSTAT=$? 

fi 

 

# --------------------------------------------------------------------------- 

# Log the completion of this script. 

# --------------------------------------------------------------------------- 

if [ "$RSTAT" = "0" ] 

then 

    LOGMSG="backup finished successfully" 

else 

    LOGMSG="backup ended in error" 

fi 

 

echo >> $RMAN_LOG_FILE 

echo Script $0 >> $RMAN_LOG_FILE 

echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE 

echo >> $RMAN_LOG_FILE 

echo $LOGMSG | mailx -v -s "oracle backup info"  < $RMAN_LOG_FILE 

 

exit $RSTAT 

 

3.2加入备份计划任务
用cron创建定时执行任务 ,要使用cron必须启动crond服务,最好还设置cron为开机启动(非本主题内容) 执行crontab –e 添加以下语句 

00 03 * * * sh /home/oracle/fullbackup/rac_backup.sh

计划任务实现每天凌晨3点实施备份工作。

4 恢复策略
针对一周内任意一天出现数据库故障需要恢复可遵循如下恢复策略:

周一恢复:使用周日全备份

周二恢复:周日全备+周一增备

周三恢复:周日全备+周一、二增备

周四恢复:周日全备+周三增备

周五恢复:周日+周三、四备

周六恢复:周日+周三、周四、周五增备

周日恢复:周日+周三、四、五、六增备

更低粒度恢复选择使用闪回功能(数据误删除、误操作等)基于时间点、scn等做数据恢复。

本处将结束简单的恢复操作,即没有归档丢失,同时存在完整可用的备份下进行的恢复操作。在恢复之前,需要将数据库关闭,通过rman启动实例并准备恢复。

$ srvctl stop database -d frxdb

因为备份放在共享磁盘上,所以可在单个节点进行恢复,在任一节点:

rman target /

rman >startup mount

rman>restore database;

rman>recover database;

如归档连续,操作将成功,可直接执行以下命令打开数据库:

rman>sql ‘alter database open’; 

注:恢复完成后立即执行备份操作。

相关推荐