rac自动备份脚本

1.1备份策略

周日进行一次零级备份,周一、周二、进行二级备份;周三进行一级备份;周四、周五、周六进行二级备份。在执行备份的时候,我们考 虑将数据文件的全备和归档日志备份分开执行,避免造成一些不必要的麻烦。在进行全备的时候,由于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/db/backupset/db_%T_%s_%p.lv0' plus archivelog delete all input format '+DATA/db/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/db/backupset/db_%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/db/backupset/db_%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/

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/system@rac1   msglog $RMAN_LOG_FILE append <

run

{

allocate channel c1  type disk connect  'sys/***@rac1';

allocate channel c2  type disk connect  'sys/***@rac2';

backup  incremental level= $BAK_LEVEL Database format='+DATA/db/backupset/db_lev"$BAK_LEVEL"_%U_%T'  tag='db_lev"$BAK_LEVEL"' ;

sql 'alter system archive log current';

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

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

backup spfile tag='spfile' format='+DATA/db/backupset/db_spfile_%U_%T';

release channel c1;

release channel c2;

}

allocate channel for maintenance device type disk connect  'sys/***@rac1';

allocate channel for maintenance device type disk connect  'sys/***@rac2';

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 00 * * * sh /home/oracle/fullbackup/rac_backup.sh

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

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

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

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

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

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

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

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

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

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

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

$ srvctl stop database -d db

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

rman target /

rman >startup mount

rman>restore database;

rman>recover database;

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

rman>sql ‘alter database open’;

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值