签到成功

知道了

CNDBA社区CNDBA社区

RMAN Catalog备份脚本

2018-06-05 19:58 2393 0 原创 RMAN备份
作者: Marvinn

该脚本用于RMAN Catalog 增量备份以及自动传输备份文件到专用归档备份服务器,并且可配置发送邮件报告相关的信息是否成功
使用说明:Shell脚本部署在源端数据库服务器,希望能帮助到需要的朋友…谢谢http://www.cndba.cn/Marvinn/article/2832http://www.cndba.cn/Marvinn/article/2832http://www.cndba.cn/Marvinn/article/2832http://www.cndba.cn/Marvinn/article/2832http://www.cndba.cn/Marvinn/article/2832

http://www.cndba.cn/Marvinn/article/2832
http://www.cndba.cn/Marvinn/article/2832http://www.cndba.cn/Marvinn/article/2832http://www.cndba.cn/Marvinn/article/2832http://www.cndba.cn/Marvinn/article/2832

##================================================================================================================================
##    File name: db_bak_rman_catalog.sh
##    Usage:    db_bak_rman_catalog.sh <$ORACLE_SID> <$Resource_User_String> <$Catalog_User_String>
##    Example:    sh db_bak_rman_catalog.sh orcl sys/yunq111@orcl vpc_orcl/vpc_orcl@catadb
##    
##    Desc:
##            1、The scripts used to backup database with level 0、1、2,But Then Scripts used that 
##            User modify RMAN backup script name or backup level
##
##            2、Conform Server has installed rsync command And Configure Two Server SSH Free password
##            ,So that rsync won't need enter password
##            
##            3、User need mkdir ftp backup path to backup in Target(Catalog) Server,But In order to
##            manage,User can mkdir the same dir name with The Resource Server backup path
##
##            4、Configure resource DB server if need send email,if it is,then you need yum install mailx and configure /etc/mail.rc
##        
##    Backup Path:    mkdir -p ${ORACLE_BASE}/backup/log/${ORACLE_SID}
##                    mkdir -p ${ORACLE_BASE}/backup/fulldb/${ORACLE_SID}
##                    mkdir -p ${ORACLE_BASE}/backup/leveldb_1/${ORACLE_SID}
##                    mkdir -p ${ORACLE_BASE}/backup/leveldb_2/${ORACLE_SID}
##                    mkdir -p ${ORACLE_BASE}/backup/archivelog/${ORACLE_SID}
##                    mkdir -p ${ORACLE_BASE}/backup/controlfile/${ORACLE_SID} #该选项针对于RMAN控制文件自动备份开启得备份位置
##    Author:    Marvin
##    Blog:   http://www.cndba.cn/Marvinn
##    
##================================================================================================================================
#! /bin/bash
# User specific orale environment and startup programs

if [ -f ~/.bash_profile ];  
then  
. ~/.bash_profile  
fi


#-------------------------------
#
#    Check And Set Oracle Env
#
#-------------------------------

if [ -d $ORACLE_BASE ]; then
        export ORACLE_BASE=$ORACLE_BASE
else
        echo "User Specific Oracle Environment Not Found ORACLE_BASE"
fi

if [ -d $ORACLE_HOME ]; then
        export ORACLE_HOME=$ORACLE_HOME
else
        echo "User Specific Oracle Environment Not Found ORACLE_HOME"
fi

if [ "$#" -eq "3" ];then  
    ORACLE_SID=${1};            export ORACLE_SID
    Resource_User_String=${2};            export Resource_User_String
    Catalog_User_String=${3};   export Catalog_User_String
else
    echo "Usage: "
    echo "      `basename $0` ORACLE_SID $1 Resource_User_String $2 Catalog_User_String $3"
    echo "You provided $# parameters,but 3 are required."

fi


#-------------------------------
#
#    Set Other Environment Here         
#
#-------------------------------

mkdir -p ${ORACLE_BASE}/backup/log/${ORACLE_SID}        # Set Backuplog Path
TIMESTAMP=`date +%Y%m%d%H%M`        export TIMESTAMP
LOG_DIR=${ORACLE_BASE}/backup/log/${ORACLE_SID}        export    LOG_DIR
SSH_LOG=${LOG_DIR}/${ORACLE_SID}_alllog_infos_${TIMESTAMP}.log       
RETENTION=7
MAIL_FM=1051866518@qq.com


echo "---------------------------------------------------------" >>${SSH_LOG}
echo "Step 1. Confirm RMAN Backup Level N  at `date`."             >>${SSH_LOG}
echo "---------------------------------------------------------" >>${SSH_LOG}

WEEK_DAILY=`date +%a`
case  "${WEEK_DAILY}" in
       "Mon")
            BAK_LEVEL=2
            ;;
       "Tue")
            BAK_LEVEL=2
            ;;
       "Wed")
            BAK_LEVEL=2
            ;;
       "Thu")
            BAK_LEVEL=1
            ;;
       "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}." >>${SSH_LOG}
RMAN_LOG=${LOG_DIR}/${ORACLE_SID}_backup_level${BAK_LEVEL}_${TIMESTAMP}.log



echo "---------------------------------------------------------" >>${SSH_LOG}
echo "Step 2. Start rman to backup at `date`."                     >>${SSH_LOG}
echo "---------------------------------------------------------" >>${SSH_LOG}

if [ $BAK_LEVEL = "0" ]; then

rman target ${Resource_User_String} catalog ${Catalog_User_String} log=${RMAN_LOG} <<EOF
    resync catalog;
    run {execute script local_fulldb_orcl;}
    exit;
EOF
RV=$?
elif [ $BAK_LEVEL = "1" ]; then
rman target ${Resource_User_String} catalog ${Catalog_User_String} log=${RMAN_LOG} <<EOF
    resync catalog;
    run {execute script local_level1_orcl;}
    exit;
EOF
RV=$?
else
rman target ${Resource_User_String} catalog ${Catalog_User_String} log=${RMAN_LOG} <<EOF
    resync catalog;
    run {execute script local_level2_orcl;}
    exit;
EOF
RV=$?
fi


cat ${RMAN_LOG}>>${SSH_LOG}
echo ""           >>${SSH_LOG}
echo "=====>>>Msg1: RMAN backup end as `date`." >>${SSH_LOG}

if [ $RV -ne "0" ]; then
    echo ""    >>${SSH_LOG}
    echo "=====>>>Msg2: RMAN backup error at `date`." >>${SSH_LOG}
    # Set Mail And Send To Tell You
    MAIL_TEXT="Failed RMAN backup for $ORACLE_SID on `hostname` at `date`."
    echo ${MAIL_TEXT} | mail -s "$ORACLE_SID RMAN backup " -a ${RMAN_LOG} -a ${SSH_LOG} ${MAIL_FM} 
    exit
else
    echo "" >>${SSH_LOG}
    echo "=====>>>Msg2: No errors Founds during RMAN backup peroid at `date`." >>${SSH_LOG}
    # Here Can Set If The RMAN Backup LOG Can Delete
    # rm -rf ${RMAN_LOG} 2>/dev/null
    # Successful completed finally Send mail 
fi


echo "---------------------------------------------------------" >>${SSH_LOG}
echo "Step 3: Start ftp backupset to backup server at `date`."   >>${SSH_LOG}
echo "---------------------------------------------------------" >>${SSH_LOG}

#===========================================================================================================================
#Usage:
#    RESOURCE_fulldb_BAK_DIR=B
#        B: Resource Database RMAN fullldb backup scripts backup format path
#    RESOURCE_LEVEL1_BAK_DIR=C
#        C: Resource Database RMAN INC backup Level 1 script backup format path
#    RESOURCE_LEVEL2_BAK_DIR=D
#        D: Resource Database RMAN INC backup Level 2 script backup format path
#    RESOURCE_ARCH_BAK_DIR=F
#        F: Resource Database RMAN Archivelog backup  script backup format path
#
#    TARGET_RYSNC_HOST_IP=H
#        H: Remote RSYNC backup Server host IP
#    TARGET_fulldb_BAK_DIR=B
#        B: According to resource ORACLE_SID,Oracle user Manual mkdir remote Server RMAN fullldb backup Storage path
#    TARGET_LEVEL1_BAK_DIR=C
#        C: According to resource ORACLE_SID,Oracle user Manual mkdir remote Server RMAN INC backup Level 1 Storage path
#    TARGET_LEVEL2_BAK_DIR=D
#        D: According to resource ORACLE_SID,Oracle user Manual mkdir remote Server RMAN INC backup Level 2 Storage path
#    TARGET_ARCH_BAK_DIR=F
#        F: According to resource ORACLE_SID,Oracle user Manual mkdir remote Server RMAN  Archivelog backup  Storage path
#============================================================================================================================

RESOURCE_fulldb_BAK_DIR=${ORACLE_BASE}/backup/fulldb/${ORACLE_SID}
RESOURCE_LEVEL1_BAK_DIR=${ORACLE_BASE}/backup/leveldb_1/${ORACLE_SID}
RESOURCE_LEVEL2_BAK_DIR=${ORACLE_BASE}/backup/leveldb_2/${ORACLE_SID}
RESOURCE_ARCH_BAK_DIR=${ORACLE_BASE}/backup/archivelog/${ORACLE_SID}

TARGET_RYSNC_HOST_IP=172.16.10.110                          #Remote RSYNC backup Server host IP
TARGET_fulldb_BAK_DIR=/u01/backup/fulldb/
TARGET_ARCH_BAK_DIR=/u01/backup/archivelog/
TARGET_LEVEL1_BAK_DIR=/u01/backup/leveldb_1/
TARGET_LEVEL2_BAK_DIR=/u01/backup/leveldb_2/


#------------------------------------------------------------------------------------------------
#Rsync Usage:
#        Target Backup server need mkdir the same with oracle user,just like install oracle,Then
#        Configure Resource Server and Target Backup server Mutual SSH trust,confirm two servers 
#        can free password access
#-----------------------------------------------------------------------------------------------                                    

RSYN_LOG=${LOG_DIR}/rsync_${TIMESTAMP}.log

# Rsync is used to ftp backup set to bak server.

if [ $BAK_LEVEL = "0" ]; then

rsync -avzSH --progress --rsh=ssh  ${RESOURCE_fulldb_BAK_DIR} oracle@${TARGET_RYSNC_HOST_IP}:${TARGET_fulldb_BAK_DIR} > ${RSYN_LOG} 2>&1  
RV=$?
rsync -avzSH --progress --rsh=ssh  ${RESOURCE_ARCH_BAK_DIR} oracle@${TARGET_RYSNC_HOST_IP}:${TARGET_ARCH_BAK_DIR} > ${RSYN_LOG} 2>&1  
RV1=$?

elif [ $BAK_LEVEL = "1" ]; then

rsync -avzSH --progress --rsh=ssh ${RESOURCE_LEVEL1_BAK_DIR} oracle@${TARGET_RYSNC_HOST_IP}:${TARGET_LEVEL1_BAK_DIR} > ${RSYN_LOG} 2>&1  
RV=$?

else

rsync -avzSH --progress --rsh=ssh ${RESOURCE_LEVEL2_BAK_DIR} oracle@${TARGET_RYSNC_HOST_IP}:${TARGET_LEVEL2_BAK_DIR} > ${RSYN_LOG} 2>&1  
RV=$?

fi


cat ${RSYN_LOG}>>${SSH_LOG}

if [ $BAK_LEVEL = "0" ]; then
if [ $RV -ne "0" -a $RV1 -ne "0" ]; then  
    echo ""                                                    >>${SSH_LOG}  
    echo "=====>Msg3: FTP fulldb and Archivelog  backupset error at `date`."          >>${SSH_LOG}
    # Set Mail And Send To Tell You
    MAIL_TEXT="Failed fulldb and Archivelog ftp to backup Server for $ORACLE_SID on `hostname` at `date`." 
    echo ${MAIL_TEXT} | mail -s "$ORACLE_SID RMAN backup Ftp " -a ${RMAN_LOG} -a ${RSYN_LOG} -a ${SSH_LOG} ${MAIL_FM} 
    exit  
elif [ $RV -eg "0" -a $RV1 -ne "0" ]; then
    echo ""                                                    >>${SSH_LOG} 
    echo "=====>Msg3: FTP  fulldb  backupset No errors at `date`."  >>${SSH_LOG}     
    echo "=====>Msg3: FTP  Archivelog  backupset error at `date`."  >>${SSH_LOG}  
    # Set Mail And Send To Tell You
    MAIL_TEXT1="Sucessful completed fullldb backup FTP to backup Server for $ORACLE_SID on `hostname` at `date`."
    MAIL_TEXT2="Failed Archivelog ftp to backup Server for $ORACLE_SID on `hostname` at `date`."
    echo -e "`cat ${MAIL_TEXT1}`/n`${MAIL_TEXT2}`"| mail -s "$ORACLE_SID RMAN backup Ftp " -a ${RMAN_LOG} -a ${RSYN_LOG} -a ${SSH_LOG} ${MAIL_FM} 
    exit
elif [ $RV -ne "0" -a $RV1 -eg "0" ]; then
    echo ""                                                    >>${SSH_LOG}
    echo "=====>Msg3: FTP  Archivelog  backupset No errors at `date`."  >>${SSH_LOG}  
    echo "=====>Msg3: FTP  fulldb  backupset error at `date`."  >>${SSH_LOG}  
    # Set Mail And Send To Tell You
    MAIL_TEXT1="Sucessful completed Archivelog FTP to backup Server for $ORACLE_SID on `hostname` at `date`."
    MAIL_TEXT2="Failed fulldb bakcup ftp to backup Server for $ORACLE_SID on `hostname` at `date`."
    echo -e "`cat ${MAIL_TEXT1}`/n`${MAIL_TEXT2}`"| mail -s "$ORACLE_SID RMAN backup Ftp " -a ${RMAN_LOG} -a ${RSYN_LOG} -a ${SSH_LOG} ${MAIL_FM}     
    exit
else  
    echo ""                                                 >>${SSH_LOG}  
    echo -e "=====>Msg3: No error found during FTP fulldb and Archivelog  backupse peroid." >>${SSH_LOG}  
    # Successful completed finally Send mail 
fi
elif [ $BAK_LEVEL = "1" ]; then
if [ $RV -ne "0" ]; then  
    echo ""                                                    >>${SSH_LOG}  
    echo "=====>Msg3: FTP DB $ORACLE_SID INC Level 1 backupset error at `date`."          >>${SSH_LOG}  
    # Set Mail And Send To Tell You
    MAIL_TEXT="FTP DB $ORACLE_SID INC Level 1 backupset error on `hostname` at `date`"
    echo ${MAIL_TEXT} | mail -s "$ORACLE_SID RMAN backup Level 1 Ftp " -a ${RMAN_LOG} -a ${RSYN_LOG} -a ${SSH_LOG} ${MAIL_FM} 
    exit  
else  
    echo ""                                                 >>${SSH_LOG}  
    echo -e "=====>Msg3: No error found during DB $ORACLE_SID Ftp INC Backup Level 1  backupse peroid." >>${SSH_LOG}
    # Successful completed finally Send mail     
fi
else
if [ $RV -ne "0" ]; then  
    echo ""                                                    >>${SSH_LOG}  
    echo "=====>Msg3: FTP DB $ORACLE_SID INC Level 2 backupset error at `date`."          >>${SSH_LOG}  
    # Set Mail And Send To Tell You
    MAIL_TEXT="FTP DB $ORACLE_SID INC Level 2 backupset error on `hostname` at `date`"
    echo ${MAIL_TEXT} | mail -s "$ORACLE_SID RMAN backup Level 2 Ftp " -a ${RMAN_LOG} -a ${RSYN_LOG} -a ${SSH_LOG} ${MAIL_FM} 
    exit  
else  
    echo ""                                                 >>${SSH_LOG}  
    echo -e "=====>Msg3: No error found during DB $ORACLE_SID Ftp INC Backup Level 2  backupse peroid." >>${SSH_LOG}
    # Successful completed finally Send mail 
fi
fi


echo "---------------------------------------------------------" >>${SSH_LOG}
echo "Step 4: RMAN backup and ftp backupset finished at `date`." >>${SSH_LOG}
echo "---------------------------------------------------------" >>${SSH_LOG}

MAIL_SUB="No errors during DB $ORACLE_SID RMAN backup and ftp backupset Successful finished at `hostname` `date`."
echo ${MAIL_SUB} | mail -s "$ORACLE_SID RMAN backup and Ftp backupset" -a ${RMAN_LOG} -a ${RSYN_LOG} -a ${SSH_LOG} ${MAIL_FM} 


# -----------------------------------------------------  
# Removing files older than $RETENTION parameter  
# ----------------------------------------------------- 

find ${LOG_DIR} -name "*.*" -mtime +$RETENTION -exec rm {} /;  

exit

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

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

Marvinn

关注

路漫漫其修远兮、吾将上下而求索

  • 99
    原创
  • 0
    翻译
  • 2
    转载
  • 36
    评论
  • 访问:458428次
  • 积分:449
  • 等级:中级会员
  • 排名:第12名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ