淺析oracle備份腳本代碼


  oracle9i備份腳本:

    全備(level 0):
    bash-3.00$ more ora9i_rman_bak.sh | grep -v "#"
    CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1`
    RMAN_LOG_FILE=${0}.out
    if [ -f "$RMAN_LOG_FILE" ]
    then
    rm -f "$RMAN_LOG_FILE"
    fi
    echo >> $RMAN_LOG_FILE
    chmod 666 $RMAN_LOG_FILE
    echo Script $0 >> $RMAN_LOG_FILE
    echo ==== started on `date` ==== >> $RMAN_LOG_FILE
    echo >> $RMAN_LOG_FILE
    ORACLE_HOME=/orahome/oracle/product/9.2.0
    export ORACLE_HOME
    ORACLE_SID=bims
    export ORACLE_SID
    ORACLE_USER=oracle
    TARGET_CONNECT_STR=/
    RMAN=$ORACLE_HOME/bin/rman
    echo >> $RMAN_LOG_FILE
    echo   "RMAN: $RMAN" >> $RMAN_LOG_FILE
    echo   "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE
    echo   "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE
    echo   "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE
    echo  >> $RMAN_LOG_FILE
    echo   "NB_ORA_FULL: $NB_ORA_FULL" >> $RMAN_LOG_FILE
    echo   "NB_ORA_INCR: $NB_ORA_INCR" >> $RMAN_LOG_FILE
    echo   "NB_ORA_CINC: $NB_ORA_CINC" >> $RMAN_LOG_FILE
    echo   "NB_ORA_SERV: $NB_ORA_SERV" >> $RMAN_LOG_FILE
    echo   "NB_ORA_POLICY: $NB_ORA_POLICY" >> $RMAN_LOG_FILE
    echo >> $RMAN_LOG_FILE
    if [ "$NB_ORA_FULL" = "1" ]
    then
    echo "Full backup requested" >> $RMAN_LOG_FILE
    BACKUP_TYPE="INCREMENTAL LEVEL=0"
    elif [ "$NB_ORA_INCR" = "1" ]
    then
    echo "Differential incremental backup requested" >> $RMAN_LOG_FILE
    BACKUP_TYPE="INCREMENTAL LEVEL=1"
    elif [ "$NB_ORA_CINC" = "1" ]
    then
    echo "Cumulative incremental backup requested" >> $RMAN_LOG_FILE
    BACKUP_TYPE="INCREMENTAL LEVEL=1 CUMULATIVE"
    elif [ "$BACKUP_TYPE" = "" ]
    then
    echo "Default - Full backup requested" >> $RMAN_LOG_FILE
    BACKUP_TYPE="INCREMENTAL LEVEL=0"
    fi
    CMD_STR="
    ORACLE_HOME=$ORACLE_HOME
    export ORACLE_HOME
    ORACLE_SID=$ORACLE_SID
    export ORACLE_SID
    NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
    export NLS_DATE_FORMAT
    $RMAN target $TARGET_CONNECT_STR nocatalog msglog $RMAN_LOG_FILE append << EOF
    crosscheck archivelog all;
    delete noprompt expired archivelog all;
    RUN {
    ALLOCATE CHANNEL ch00 TYPE disk;
    ALLOCATE CHANNEL ch01 TYPE disk;
    ALLOCATE CHANNEL ch02 TYPE disk;
    ALLOCATE CHANNEL ch03 TYPE disk;
    BACKUP
    $BACKUP_TYPE
    SKIP INACCESSIBLE
    TAG hot_db_bk_level0
    FILESPERSET 5
    FORMAT '/orahomebak/backup/database/bk_%s_%p_%t'
    DATABASE;
    sql 'alter system archive log current';
    RELEASE CHANNEL ch00;
    RELEASE CHANNEL ch01;
    RELEASE CHANNEL ch02;
    RELEASE CHANNEL ch03;
    ALLOCATE CHANNEL ch00 TYPE disk;
    ALLOCATE CHANNEL ch01 TYPE disk;
    BACKUP
    filesperset 20
    FORMAT '/orahomebak/backup/arch/al_%s_%p_%t'
    ARCHIVELOG ALL DELETE INPUT;
    RELEASE CHANNEL ch00;
    RELEASE CHANNEL ch01;
    ALLOCATE CHANNEL ch00 TYPE disk;
    BACKUP
    FORMAT '/orahomebak/backup/database/cntrl_%s_%p_%t'
    CURRENT CONTROLFILE;
    RELEASE CHANNEL ch00;
    }
    EOF
    "
    if [ "$CUSER" = "root" ]
    then
    su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE
    RSTAT=$?
    else
    /usr/bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE
    RSTAT=$?
    fi
    if [ "$RSTAT" = "0" ]
    then
    LOGMSG="ended successfully"
    else
    LOGMSG="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
    exit $RSTAT
    Differential incremental backup(level 1):
    bash-3.00$ more ora9i_rman_bak.sh | grep -v "#"
    CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1`
    RMAN_LOG_FILE=${0}.out
    if [ -f "$RMAN_LOG_FILE" ]
    then
    rm -f "$RMAN_LOG_FILE"
    fi
    echo >> $RMAN_LOG_FILE
    chmod 666 $RMAN_LOG_FILE
    echo Script $0 >> $RMAN_LOG_FILE
    echo ==== started on `date` ==== >> $RMAN_LOG_FILE
    echo >> $RMAN_LOG_FILE
    ORACLE_HOME=/orahome/oracle/product/9.2.0
    export ORACLE_HOME
    ORACLE_SID=bims
    export ORACLE_SID
    ORACLE_USER=oracle
    TARGET_CONNECT_STR=/
    RMAN=$ORACLE_HOME/bin/rman
    echo >> $RMAN_LOG_FILE
    echo   "RMAN: $RMAN" >> $RMAN_LOG_FILE
    echo   "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE
    echo   "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE
    echo   "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE
    echo  >> $RMAN_LOG_FILE
    echo   "NB_ORA_FULL: $NB_ORA_FULL" >> $RMAN_LOG_FILE
    echo   "NB_ORA_INCR: $NB_ORA_INCR" >> $RMAN_LOG_FILE
    echo   "NB_ORA_CINC: $NB_ORA_CINC" >> $RMAN_LOG_FILE
    echo   "NB_ORA_SERV: $NB_ORA_SERV" >> $RMAN_LOG_FILE
    echo   "NB_ORA_POLICY: $NB_ORA_POLICY" >> $RMAN_LOG_FILE
    echo >> $RMAN_LOG_FILE
    echo "Differential incremental backup requested" >> $RMAN_LOG_FILE
    CMD_STR="
    ORACLE_HOME=$ORACLE_HOME
    export ORACLE_HOME
    ORACLE_SID=$ORACLE_SID
    export ORACLE_SID
    NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
    export NLS_DATE_FORMAT
    $RMAN target $TARGET_CONNECT_STR nocatalog msglog $RMAN_LOG_FILE append << EOF
    crosscheck archivelog all;
    delete noprompt expired archivelog all;
    RUN {
    ALLOCATE CHANNEL ch00 TYPE disk;
    ALLOCATE CHANNEL ch01 TYPE disk;
    ALLOCATE CHANNEL ch02 TYPE disk;
    ALLOCATE CHANNEL ch03 TYPE disk;
    BACKUP
    INCREMENTAL LEVEL 1
    SKIP INACCESSIBLE
    TAG hot_db_bk_level1
    FILESPERSET 5
    FORMAT '/orahomebak/backup/database/bk_%s_%p_%t'
    DATABASE;
    sql 'alter system archive log current';
    RELEASE CHANNEL ch00;
    RELEASE CHANNEL ch01;
    RELEASE CHANNEL ch02;
    RELEASE CHANNEL ch03;
    ALLOCATE CHANNEL ch00 TYPE disk;
    ALLOCATE CHANNEL ch01 TYPE disk;
    BACKUP
    filesperset 20
    FORMAT '/orahomebak/backup/arch/al_%s_%p_%t'
    ARCHIVELOG ALL DELETE INPUT;
    RELEASE CHANNEL ch00;
    RELEASE CHANNEL ch01;
    ALLOCATE CHANNEL ch00 TYPE disk;
    BACKUP
    FORMAT '/orahomebak/backup/database/cntrl_%s_%p_%t'
    CURRENT CONTROLFILE;
    RELEASE CHANNEL ch00;
    }
    EOF
    "
    if [ "$CUSER" = "root" ]
    then
    su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE
    RSTAT=$?
    else
    /usr/bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE
    RSTAT=$?
    fi
    if [ "$RSTAT" = "0" ]
    then
    LOGMSG="ended successfully"
    else
    LOGMSG="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

    exit $RSTAT

    現有腳本
    [root@jysh ~]# crontab -l
    40 15 * * * su - oracle -c /home/oracle/exp.sh 2>&1 >>/home/oracle/script_exp.log
    [root@jysh ~]# cat /home/oracle/exp.sh
    rq=$(date +%Y%m%d)
    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    echo $NLS_LANG
    echo 'rq--->' $rq
    exp system/***** owner=jysh file=/home/oracle/dbbak/jysh$rq.dmp log=/home/oracle/dbbak/jysh$rq.log
    經過查驗目前備份結果以及數據庫文件均放置在/home分區下,且/home分區僅有90G空間.且備份策略中並無刪除歷史記錄的功能.建議對策略及備份路徑進行調整,備份放置在/opt目錄下,此目錄空間可達200G.
    同時修改crontab腳本,調整備份時間以及備份頻率,週期等.

文章來源:http://blog.chinaunix.net/uid-26313110-id-5211993.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章