• DG环境数据库RMAN备份策略制定


    DG环境数据库RMAN备份策略制定:
    主库(Primary)

    备库(Standby)

    引用说明

    主库(Primary)

    $ crontab -l ``` 0 1 * * * /bin/bash /usr2/backupsh/full_backup.rman 0 */2 * * * /bin/bash /usr2/backupsh/arch_backup.rman 0 3 * * * /bin/bash /usr2/backupsh/del_old.sh ```

    全库备份

    more /usr2/backupsh/full_backup.rman ``` #!/bin/bash #Make sure your bkdir and change it! bkdir=/usr2/BACKUP foldername=`date +%Y%m%d` mkdir -p $bkdir cd $bkdir if [ -d $foldername ] then echo 'go on' else echo 'need mkdir' mkdir $foldername fi

    oracle environment

    export ORACLE_SID=jyzhao
    export ORACLE_BASE=/opt/app/oracle
    export ORACLE_HOME=/opt/app/oracle/product/11.2.0/db_1
    export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin

    export LD_LIBRARY_PATH=$ORACLE_HOME/lib

    export NLS_LANG="simplified chinese_china.ZHS16GBK"

    export NLS_DATE_FORMAT="YYYY-MM-DD HH24:Mi:SS"

    rman target / log=$bkdir/$foldername/LOG_full_$foldername.log <<EOF
    run{
    configure retention policy to recovery window of 5 days;
    configure controlfile autobackup on;
    configure controlfile autobackup format for device type disk to '$bkdir/$foldername/controlfile%F';
    CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
    allocate channel c1 device type disk;
    allocate channel c2 device type disk;
    allocate channel c3 device type disk;
    allocate channel c4 device type disk;

    backup database skip inaccessible

    backup incremental level=0 database
    format '$bkdir/$foldername/full_BACK_%U';
    release channel c1;
    release channel c2;
    release channel c3;
    release channel c4;
    }
    allocate channel for maintenance device type disk;
    crosscheck backupset;
    delete noprompt expired backupset;
    delete noprompt obsolete;
    exit
    EOF

    <h2 id='1.2'> 归档备份 </h2>
    more /usr2/backupsh/arch_backup.rman
    

    !/bin/bash

    Make sure your bkdir and change it!

    bkdir=/usr2/BACKUP
    foldername=date +%Y%m%d
    mkdir -p $bkdir
    cd $bkdir
    if [ -d $foldername ]
    then
    echo 'go on'
    else
    echo 'need mkdir'
    mkdir $foldername
    fi

    oracle environment

    export ORACLE_SID=jyzhao
    export ORACLE_BASE=/opt/app/oracle
    export ORACLE_HOME=/opt/app/oracle/product/11.2.0/db_1
    export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin

    export LD_LIBRARY_PATH=$ORACLE_HOME/lib

    export NLS_LANG="simplified chinese_china.ZHS16GBK"

    export NLS_DATE_FORMAT="YYYY-MM-DD HH24:Mi:SS"

    rman target / log=$bkdir/$foldername/LOG_arch_$foldername.log append <<EOF
    run{
    configure retention policy to recovery window of 5 days;
    configure controlfile autobackup on;
    configure controlfile autobackup format for device type disk to '$bkdir/$foldername/controlfile%F';
    CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
    allocate channel c1 device type disk;
    allocate channel c2 device type disk;
    allocate channel c3 device type disk;
    allocate channel c4 device type disk;

    backup database skip inaccessible

    backup archivelog all delete input
    format '$bkdir/$foldername/arch_BACK_%U';
    release channel c1;
    release channel c2;
    release channel c3;
    release channel c4;
    }
    allocate channel for maintenance device type disk;
    crosscheck backupset;
    delete noprompt expired backupset;
    delete noprompt obsolete;
    exit
    EOF

    
    <h2 id='1.3'> 删除历史文件夹 </h2>
    more /usr2/backupsh/del_old.sh
    

    !/bin/bash

    del old folders

    Make sure your bkdir and change it!

    bkdir=/usr2/BACKUP
    cd $bkdir && find . -mtime +7 | xargs rm -rf

    <h1 id='2'> 备库(Standby) </h1>
    $ crontab -l
    

    0 3 * * * /usr2/del_arch/del_arch.sh

    <h2 id='2.1'> 删除归档 </h2>
    more /usr2/del_arch/del_arch.sh
    

    !/bin/bash

    export ORACLE_SID=jyzhao_s
    export ORACLE_HOME=/opt/app/oracle/product/11.2.0/db_1
    export ARCHIVE_DIR=/usr2/oradata/archivelog
    export LOG_FILE=/usr2/oradata/archivelog/del_archive.log

    echo "开始删除归档日志:date……">>$LOG_FILE
    if [ whoami != 'oracle' ]
    then
    echo "Error: You must be oracle to execute.">>$LOG_FILE
    exit 99
    fi

    del_seq=ls -rt $ARCHIVE_DIR/ |grep -v JYZHAO_S| head -1|cut -f4 -d_|cut -f1 -d.
    $ORACLE_HOME/bin/sqlplus -silent "/ as sysdba" <tmp.log
    set pagesize 0 feedback off verify off heading off echo off
    select max(sequence#) from v$ARCHIVED_LOG where APPLIED='YES';
    exit;
    XFF
    max_sn=cat tmp.log
    rm tmp.log
    max_sn=$(( $max_sn - 20 ))

    我这里是保留最近的20个归档文件,这个具体情况自己决定

    while [[ ${del_seq} -lt ${max_sn} ]]
    do
    echo "${ARCHIVE_DIR}/arch_874084675_1_${del_seq}.arc">>$LOG_FILE
    rm ${ARCHIVE_DIR}/arch_874084675_1_${del_seq}.arc

    这里是我定义归档文件的格式,具体根据自己的归档文件格式来匹配,关键是匹配日志的sequence no。

    del_seq=$(( $del_seq + 1 ))
    done
    echo "删除归档日志结束:date……">>$LOG_FILE

    清楚controlfile中信息

    $ORACLE_HOME/bin/rman target / <>$LOG_FILE
    crosscheck archivelog all;
    delete expired archivelog all;
    YES
    exit;
    XIFENFEI

    echo "………………………………………………………………………………………………………………………">>$LOG_FILE

    
    <h1 id='3'> 引用说明 </h1>
    备库删除归档的脚本参考于惜分飞的博客,原地址如下:
    [http://www.xifenfei.com/1144.html](http://www.xifenfei.com/1144.html)
    原文说到重点是在读取现在存在的归档日志文件中sequence最小值时,
    使用了`ls -tr $ARCHIVE_DIR/|grep -v stdarch | head -1|cut -f2 -d_`
    而我这里就根据实际情况改成:`ls -rt $ARCHIVE_DIR/ |grep -v JYZHAO_S| head -1|cut -f4 -d_|cut -f1 -d.`
  • 相关阅读:
    Title标题及Description描述字数
    网站优化十忌
    link和domain的区别
    什么是回合制游戏
    人文社科核心、中文核心、北大核心期刊
    锚文本
    笔记本声音尖叫的问题
    Educational Technology Journals(转)
    配置SharePoint门户网站的基本思路
    SEO 如何优化单个页面16招
  • 原文地址:https://www.cnblogs.com/jyzhao/p/4476517.html
Copyright © 2020-2023  润新知