浅析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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值