签到成功

知道了

CNDBA社区CNDBA社区

RMAN 备份 shell 脚本

2025-07-04 10:25 4 0 原创 Oracle 19c
作者: dave

这个 RMAN 备份shell脚本用了十几年,从 Oracle 9i 到现在 19c,最早是从NBU 备份软件里喽出来的,这个版本把邮箱发送的部分删掉了。过去了这么多年,今年还收到别人给我发的备份失败的邮件,就想到了 08 年刚工作的时候,那会shell 能力也一般,也没有啥资料,当时拿到这个脚本的时候,也是改了半天,边改边测试。http://www.cndba.cn/dave/article/131676http://www.cndba.cn/dave/article/131676

http://www.cndba.cn/dave/article/131676
http://www.cndba.cn/dave/article/131676http://www.cndba.cn/dave/article/131676http://www.cndba.cn/dave/article/131676http://www.cndba.cn/dave/article/131676
http://www.cndba.cn/dave/article/131676
http://www.cndba.cn/dave/article/131676
http://www.cndba.cn/dave/article/131676

#!/bin/bash 
export LANG=en_US
BACKUP_DATE=`date +%d`
#RMAN_LOG_FILE=${0}.out
RMAN_LOG_FILE=/u01/scripts/dg1.rman.sh.out
TODAY=`date`
USER=`id|cut -d "(" -f2|cut -d ")" -f1`
echo "-----------------$TODAY-------------------">$RMAN_LOG_FILE
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export ORACLE_HOME
RMAN=$ORACLE_HOME/bin/rman
export RMAN
ORACLE_SID=cd
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=0
            ;;
       "Tue")
            BAK_LEVEL=0
            ;;
       "Wed")
            BAK_LEVEL=0
            ;;
       "Thu")
            BAK_LEVEL=0
            ;;
       "Fri")
            BAK_LEVEL=0
            ;;
       "Sat")
            BAK_LEVEL=0
            ;;
       "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 / msglog $RMAN_LOG_FILE append << EOF 
run
{
configure device type disk parallelism 8;
backup  incremental level= $BAK_LEVEL  skip inaccessible filesperset 5 Database format='/backup/cd_lev"$BAK_LEVEL"_%U_%T'  tag='cd_lev"$BAK_LEVEL"';

backup archivelog all tag='arc_bak' format='/backup/arch_%U_%T' skip inaccessible  filesperset 5 not  backed up 1 times delete input ;

backup current controlfile tag='bak_ctlfile' format='/backup/ctl_file_%U_%T';
backup spfile tag='spfile' format='/backup/cd_spfile_%U_%T';

}


report obsolete; 
delete noprompt obsolete; 
crosscheck backup; 
delete noprompt expired backup;
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="cndba Database backup successfully" 
else 
    LOGMSG="cndba database backup failed with error" 
fi 

echo >> $RMAN_LOG_FILE 
echo Script $0 >> $RMAN_LOG_FILE 
echo ==== $LOGMSG on `date +%Y/%m/%d-%H:%M:%H` ==== >> $RMAN_LOG_FILE 
echo >> $RMAN_LOG_FILE

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2283
    原创
  • 3
    翻译
  • 579
    转载
  • 196
    评论
  • 访问:8165856次
  • 积分:4428
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ