zoukankan      html  css  js  c++  java
  • RMAN的实战篇--备份脚本

    案列一、

    目标:

    1、每天夜间1 点执行;
    2、数据库全备,同时备份控制文件及归档日志文件,备份文件保存至: /backup目录下,并在完成归档日志文件备份后,自动删除已备份的归档日志;
    3、备份保留7 天,过期则自动删除;
    4、保留操作日志备查;

    1. 编写RMAN脚本:

    RUN{
            CONFIGURE RETENTION POLICY TO  RECOVERY WINDOW OF 7 DAYS;
            CONFIGURE CONTROLFILE AUTOBACKUP ON;
            CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/%F';
            ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT '/backup/%U';
            BACKUP DATABASE SKIP INACCESSIBLE FILESPERSET 10
                    PLUS ARCHIVELOG FILESPERSET 20
                    DELETE ALL INPUT;
                    RELEASE CHANNEL CH1;
    }
    ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK;
    CROSSCHECK BACKUPSET;
    DELETE NOPROMPT OBSOLETE;

      SKIP INACCESSIBLE:表示跳过不可读的文件。

      SKIP OFFLINE:跳过offline 的数据文件;

      SKIP READONLY:跳过那些所在表空间为read-only 的数据文件;

    2. 执行,并将输出日志重定向到指定文件

    rman target/ msglog /home/oracle/Script/logs/`date +%F`.log cmdfile=/home/oracle/Script/orclDB_backup.rman 

    3.检测结果

    [oracle@oracle Script]$ ls /backup/
    0mro5acq_1_1              0oro5afm_1_1              
    0nro5ada_1_1              c-1458478724-20161223-00  
    [oracle@oracle Script]$ ls logs/
    2016-12-23.log

    案列二、增量备份

    ##===========================================================  
    ##   db_bak_rman.sh                
    ##   created by Robinson           
    ##   2011/11/07    
    ##   usage: db_bak_rman.sh <$ORACLE_SID> <$BACKUP_LEVEL>  
    ##          BACKUP_LEVEL:   
    ##             F: full backup  
    ##             0: level 0  
    ##             1: level 1                             
    ##============================================================  
    #!/bin/bash  
    # User specific environment and startup programs  
      
    if [ -f ~/.bash_profile ];   
    then  
    . ~/.bash_profile  
    fi  
      
    ORACLE_SID=${1};                                      export ORACLE_SID      
    RMAN_LEVEL=${2};                                      export RMAN_LEVEL  
    TIMESTAMP=`date +%Y%m%d%H%M`;                         export TIMESTAMP       
    DATE=`date +%Y%m%d`;                                  export DATE            
    RMAN_DIR=/u02/database/${ORACLE_SID}/backup/rman;       export RMAN_DIR        
    RMAN_DATA=${RMAN_DIR}/${DATE};                        export RMAN_DATA       
    RMAN_LOG=/u02/database/${ORACLE_SID}/backup/rman/log      export RMAN_LOG   
      
    # Check rman level   
    #======================================================================  
    if [ "$RMAN_LEVEL" == "F" ];  
    then  unset INCR_LVL  
          BACKUP_TYPE=full  
    else  
          INCR_LVL="INCREMENTAL LEVEL ${RMAN_LEVEL}"  
          BACKUP_TYPE=lev${RMAN_LEVEL}   
    fi  
      
    RMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP};       export RMAN_FILE  
    SSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log;      export SSH_LOG  
    MAXPIECESIZE=4G;                                                    export MAXPIECESIZE  
      
    #Check RMAN Backup Path  
    #=========================================================================  
      
    if ! test -d ${RMAN_DATA}  
    then  
    mkdir -p ${RMAN_DATA}  
    fi  
    
    if [ ! -d  ${RMAN_LOG} ];
    then
    mkdir -p ${RMAN_LOG}
    fi
    
    echo "---------------------------------" >>${SSH_LOG}  
    echo "   " >>${SSH_LOG}  
    echo "Rman Begin  to Working ........." >>${SSH_LOG}  
    echo "Begin time at:" `date` --`date +%Y%m%d%H%M` >>${SSH_LOG}  
      
    #Startup rman to backup   
    #=============================================================================  
    $ORACLE_HOME/bin/rman log=${RMAN_FILE}.log <<EOF  
    connect target /  
    run {  
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;  
    CONFIGURE BACKUP OPTIMIZATION ON;  
    CONFIGURE CONTROLFILE AUTOBACKUP ON;  
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${RMAN_FILE}_%F';  
    ALLOCATE CHANNEL 'ch1' TYPE DISK maxpiecesize=${MAXPIECESIZE};  
    ALLOCATE CHANNEL 'ch2' TYPE DISK maxpiecesize=${MAXPIECESIZE};  
    set limit channel ch1 readrate=10240;  
    set limit channel ch1 kbytes=4096000;  
    set limit channel ch2 readrate=10240;  
    set limit channel ch2 kbytes=4096000;  
    CROSSCHECK ARCHIVELOG ALL;  
    DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;  
    BACKUP   
    #AS COMPRESSED BACKUPSET   
    ${INCR_LVL}  
    DATABASE FORMAT '${RMAN_FILE}_%U' TAG '${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}';  
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';  
    BACKUP ARCHIVELOG ALL FORMAT '${RMAN_FILE}_arc_%U' TAG '${ORACLE_SID}_arc_${TIMESTAMP}'  
    DELETE  INPUT;  
    DELETE NOPROMPT OBSOLETE;  
    RELEASE CHANNEL ch1;  
    RELEASE CHANNEL ch2;  
    }  
    sql "alter database backup controlfile to ''${RMAN_DATA}/cntl_${BACKUP_TYPE}.bak''";  
    exit;
      
    EOF
     
    RC=$?  
      
    cat ${RMAN_FILE}.log >>${SSH_LOG}  
    echo "Rman Stop working @ time:"`date` `date +%Y%m%d%H%M` >>${SSH_LOG}  
      
    echo >>${SSH_LOG}  
    echo "------------------------" >>${SSH_LOG}  
    echo "------ Disk Space ------" >>${SSH_LOG}  
    df -h >>${SSH_LOG}  
      
    echo >>${SSH_LOG}  
      
    if [ $RC -ne "0" ]; then  
        echo "------ error ------" >>${SSH_LOG}  
    else  
        echo "------ no error found during RMAN backup peroid------" >>${SSH_LOG}  
        rm -rf ${RMAN_FILE}.log  
    fi  
      
    #Remove old backup than 3 days  
    #============================================================================  
    RMDIR=${RMAN_DIR}/`/bin/date +%Y%m%d -d "3 days ago"`;   export RMDIR  
    echo >>${SSH_LOG}  
    echo -e "------Remove old backup than 3 days ------
    " >>${SSH_LOG}  
      
    if test -d ${RMDIR}  
        then  
        rm -rf ${RMDIR}  
        RC=$?  
    fi  
      
    echo >>${SSH_LOG}  
      
    if [ $RC -ne "0" ]; then  
        echo -e "------ Remove old backup exception------ 
    " >>${SSH_LOG}  
    else  
        echo -e "------ no error found during remove old backup set peroid------ 
    " >>${SSH_LOG}  
    fi  
    
    exit 

    运行:

    [oracle@oracle Script]$ sh  db_rman.sh orcl 0
    RMAN> RMAN> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16> 17> 18> 19> 20> 21> 22> 23> 24> RMAN> RMAN> [oracle@oracle Script]$

    结果:

    [oracle@oracle rman]$ ls
    20161228  log
    [oracle@oracle rman]$ ls 20161228/
    cntl_lev0.bak                            orcl_lev0_201612280027_arc_2qroidlp_1_1
    orcl_lev0_201612280027_2mroidj8_1_1      orcl_lev0_201612280027_c-1458478724-20161228-02
    orcl_lev0_201612280027_2nroidj9_1_1      orcl_lev0_201612280027_c-1458478724-20161228-03
    orcl_lev0_201612280027_arc_2proidlp_1_1  
  • 相关阅读:
    每天问自己十个问题
    FreeBSD入门安装及汉化
    商人的10条赚钱规则
    端口扫描程序nmap使用手册
    canvas
    表单2.0
    H5数据保存之storage
    Linux基础命令2
    Linux文件权限与修改
    Linux基础命令1
  • 原文地址:https://www.cnblogs.com/zydev/p/6214498.html
Copyright © 2011-2022 走看看