Heim  >  Artikel  >  Datenbank  >  中小型数据库备份恢复方案

中小型数据库备份恢复方案

WBOY
WBOYOriginal
2016-06-07 15:24:021092Durchsuche

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 4、创建RMAN备份shell脚本 [python] oracle@BKDB01p:/u02/database/common/rman_scripts more db_bak_rman_catalog.sh ##=========================================================== ## File nam

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入


    4、创建RMAN备份shell脚本
    [python]
    oracle@BKDB01p:/u02/database/common/rman_scripts> more db_bak_rman_catalog.sh
    ##===========================================================
    ##   File name: db_bak_rman_catalog.sh
    ##   Usage: db_bak_rman_catalog.sh
    ##   Desc:
    ##        The script uses to backup database with level 0.
    ##============================================================
    #!/bin/bash
    # User specific environment and startup programs
    if [ -f ~/.bash_profile ];
    then
    . ~/.bash_profile
    fi
    # --------------------------
    #   Check SID
    # --------------------------
    if [ -z "${1}" ];then
    echo "Usage: "
    echo "      `basename $0` ORACLE_SID"
    exit 1
    fi
    # -------------------------------
    #  Set environment here
    # -------------------------------
    ORACLE_SID=${1};                                    export ORACLE_SID
    TIMESTAMP=`date +%Y%m%d%H%M`;                       export TIMESTAMP
    LOG_DIR=/u02/database/${ORACLE_SID}/backup          export LOG_DIR
    RMAN_LOG=${LOG_DIR}/${ORACLE_SID}_bak_${TIMESTAMP}.log
    SSH_LOG=${LOG_DIR}/${ORACLE_SID}_bak_full_${TIMESTAMP}.log
    MAIL_DIR=/users/oracle/sendEmail-v1.56
    MAIL_FM=oracle@BKDB01p
    RETENTION=5
    echo "----------------------------------------------------------------" 》${SSH_LOG}
    echo "Step 1. Start rman to backup at `date`."                          》${SSH_LOG}
    echo "----------------------------------------------------------------" 》${SSH_LOG}
    $ORACLE_HOME/bin/rman log=${RMAN_LOG} 《EOF
    connect target sys/xxx@${ORACLE_SID}
    connect catalog rman_user/xxx@CATADB
    resync catalog;
    run {execute global script global_inc0;}
    exit;
    EOF
    RV=$?
    cat ${RMAN_LOG}》${SSH_LOG}
    echo ""        》${SSH_LOG}
    echo "=====>MSG1: RMAN backup end at `date`." 》${SSH_LOG}
    if [ $RV -ne "0" ]; then
    echo "" 》${SSH_LOG}
    echo "=====>MSG2: RMAN backup error at `date`." 》${SSH_LOG}
    $MAIL_DIR/sendEmail -f $MAIL_FM -u "Failed RMAN backup for $ORACLE_SID on `hostname`." -t dba@12306.com -o message-file=${SSH_LOG}
    exit
    else
    echo "" 》${SSH_LOG}
    echo "=====>MSG2: No error found during RMAN backup peroid at `date`" 》${SSH_LOG}
    rm -rf ${RMAN_LOG} 2>/dev/null
    fi
    echo "-------------------------------------------------------------------------" 》${SSH_LOG}
    echo "Step 2. Start ftp backupset to backup server at `date`."                   》${SSH_LOG}
    echo "-------------------------------------------------------------------------" 》${SSH_LOG}
    SRC_DB_BAK_DIR=/u02/database/${ORACLE_SID}/flash_recovery_area/${ORACLE_SID}
    SRC_ADD=10.1.2.101
    TARG_DB_BAK_DIR=/u02/database/${ORACLE_SID}/flash_recovery_area
    RSYN_LOG=${LOG_DIR}/rsync_${TIMESTAMP}.log
    # rsync is used to ftp backup set to bak server.
    rsync -avzSH --progress --delete-after oracle@${SRC_ADD}:${SRC_DB_BAK_DIR} ${TARG_DB_BAK_DIR} >${RSYN_LOG} 2>&1
    RV=$?
    cat ${RSYN_LOG}》${SSH_LOG}
    if [ $RV -ne "0" ]; then
    echo ""                                                    》${SSH_LOG}
    echo "=====>MSG3: FTP backupset error at `date`."          》${SSH_LOG}
    MAIL_SUB="Failed archive log sync for $ORACLE_SID on `hostname` at `date`."
    $MAIL_DIR/sendEmail -f $MAIL_FM -u $MAIL_SUB -t dba@12306.com -o message-file=${SSH_LOG}
    exit
    else
    echo ""                                                 》${SSH_LOG}
    echo -e "=====>MSG3: No error found during FTP peroid." 》${SSH_LOG}
    rm -rf $FTP_LOG 2>/dev/null
    fi
    echo "-------------------------------------------------------------------------"  》${SSH_LOG}
    echo "Step 3. RMAN backup and ftp backupset finished at `date`."                  》${SSH_LOG}
    echo "-------------------------------------------------------------------------"  》${SSH_LOG}
    MAIL_SUB="Sucessful completed for ${ORACLE_SID} RMAN backup and ftp backupset at `date`."
    $MAIL_DIR/sendEmail -f $MAIL_FM -u $MAIL_SUB -t dba@12306.com -o message-file=${SSH_LOG}
    # ------------------------------------------------
    # Removing files older than $RETENTION parameter
    # ------------------------------------------------
    find ${LOG_DIR} -name "*.*" -mtime +$RETENTION -exec rm {} \;
    exit
    5、自动FTP archivelog脚本
    [python]
    oracle@BKDB01p:/u02/database/common/rman_scripts> more autoftp_arch.sh
    #!/bin/bash
    ORACLE_SID=${1};                        export ORACLE_SID
    TIMESTAMP=`date +%Y%m%d%H%M`;           export TIMESTAMP
    LOG_DIR=/u02/database/${ORACLE_SID}/backup
    #Define FTP variable
    SRC_DB_BAK_DIR=/u02/database/${ORACLE_SID}/archive
    SRC_ADD=10.1.2.101
    TARG_DB_BAK_DIR=/u02/database/${ORACLE_SID}
    RSYN_LOG=${LOG_DIR}/rsync_arc_${TIMESTAMP}.log
    RSYN_ERR_LOG=${LOG_DIR}/rsync_arc_${TIMESTAMP}_err.log
    rsync -avzSH --progress --delete-after oracle@${SRC_ADD}:${SRC_DB_BAK_DIR} ${TARG_DB_BAK_DIR} >${RSYN_LOG} 2>${RSYN_ERR_LOG}
    RV=$?
    if [ ! -s ${RSYN_ERR_LOG} ];then
    rm -rf ${RSYN_ERR_LOG} 2>/dev/null
    else
    mail -s "Failed FTP archive log for $ORACLE_SID on `hostname`" dba@12306.com     fi
    exit
    6、部署备份脚本到crontab
    如果你的数据库比较少,则直接将上面的备份脚本与自动FTP archivelog脚本部署到crontab.
    如果你的数据库比较多,建议将上面的脚本封装到另外的一个文件,然后部署到crontab.
    如下面的full_bak_by_rman.sh实际上是包含了多个db_bak_rman_catalog.sh ,后面的多个full开头的使用类是的原理。
    #Rman backup and restore database
    0 1 * * 1-6 /u02/database/common/rman_scripts/full_bak_by_rman.sh
    0 3 * * 1-6 /u02/database/common/rman_scripts/full_resotre_by_rman.sh  #这个是用来还原的脚本
    #Auto ftp archive log from prod to bak server
    */16 7-20 * *  1-6 /u02/database/common/rman_scripts/full_autoftp_arch.sh

  [1] [2] 

中小型数据库备份恢复方案

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn