• RMAN备份策略与异机恢复一例


    实验环境:
    A机器(生产用途):RHEL 6.5 + Oracle 11.2.0.4 + IP Address 192.168.1.11
    B机器(备机用途):RHEL 6.5 + Oracle 11.2.0.4 + IP Address 192.168.1.61

    需求:
    A机器RMAN备份完成后自动传输备份文件到B机器。防止A机器本身硬件Crash无法恢复造成核心数据库无法恢复的窘境。而且在B机器可以将数据异机恢复到任意时间点。

    注意:因为要求备份完毕后直接脚本命令自动传输到异机备份目录,所以需要预先配置好到B机器的SSH无密码登录。

    1.定时任务:

    • 每周日1点数据库全备
    • 每天8点备份归档
    [ora11204@OEL-ASM scripts]$ crontab -l
    0 1 * * 0 /u01/orabak/scripts/backup.sh /u01/orabak
    0 8 * * * /u01/orabak/scripts/backuparch.sh /u01/orabak

    2.脚本内容:

    • 全备脚本:vi backup.sh
    #!/bin/bash
    #ENV
    export ORACLE_SID=orcl
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
    export PATH=$ORACLE_HOME/bin:$PATH
    
    #backup RMAN 
    if [ ! -d "$1" ]; then
            echo "You have input no dir for $1"
            exit 1
    fi
    
    echo "=================================================================================" >>${1}/backup_full.log
    echo "Begin backup at : `date`" >> ${1}/backup_full.log
    rman target / <<EOF >> ${1}/backup_full.log
    run {
    CONFIGURE RETENTION POLICY TO REDUNDANCY = 2;
    CONFIGURE DEVICE TYPE DISK PARALLELISM 6;
    CONFIGURE DEFAULT DEVICE TYPE TO DISK;
    backup as compressed backupset database format '${1}/FULLBAK_%d_%T_%s_%p.DBFILE'; 
    backup current controlfile format '${1}/%d.%s.%p.%T.CTL';
    backup spfile format '${1}/%d.%s.%p.%T.SPFILE';
    crosscheck backup;
    crosscheck copy;
    sql "alter system archive log current";
    backup as COMPRESSED backupset archivelog all not backed up format '${1}/%d.%s.%p.%T.ARC';
    crosscheck archivelog all;
    delete noprompt archivelog all completed before 'sysdate-10';
    delete noprompt expired backup;
    delete noprompt obsolete;
    }
    exit
    EOF
    echo "End backup at : `date`" >>${1}/backup_full.log
    
    echo "Begin scp at : `date`" >>${1}/backup_full.log
    scp ${1}/*`date +%Y%m%d`* oracle@192.168.1.61:/tmp/
    echo "End scp at : `date`" >>${1}/backup_full.log
    echo "=================================================================================" >>${1}/backup_full.log
    
    exit 0
    • 归档备份脚本:vi backuparch.sh
      这里只是去掉全备的命令,其他保留。
    #!/bin/bash
    #ENV
    export ORACLE_SID=orcl
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
    export PATH=$ORACLE_HOME/bin:$PATH
    
    #backup RMAN 
    if [ ! -d "$1" ]; then
            echo "You have input no dir for $1"
            exit 1
    fi
    
    echo "=================================================================================" >>${1}/backup_arch.log
    echo "Begin backup at : `date`" >> ${1}/backup_arch.log
    rman target / <<EOF >> ${1}/backup_arch.log
    run {
    CONFIGURE RETENTION POLICY TO REDUNDANCY = 2;
    CONFIGURE DEVICE TYPE DISK PARALLELISM 6;
    CONFIGURE DEFAULT DEVICE TYPE TO DISK;
    backup current controlfile format '${1}/%d.%s.%p.%T.CTL';
    backup spfile format '${1}/%d.%s.%p.%T.SPFILE';
    crosscheck backup;
    crosscheck copy;
    sql "alter system archive log current";
    backup as COMPRESSED backupset archivelog all not backed up format '${1}/%d.%s.%p.%T.ARC';
    crosscheck archivelog all;
    delete noprompt archivelog all completed before 'sysdate-10';
    delete noprompt expired backup;
    delete noprompt obsolete;
    }
    exit
    EOF
    echo "End backup at : `date`" >>${1}/backup_arch.log
    
    echo "Begin scp at : `date`" >>${1}/backup_arch.log
    scp ${1}/*`date +%Y%m%d`*.{CTL,SPFILE,ARC} oracle@192.168.1.61:/tmp/
    echo "End scp at : `date`" >>${1}/backup_arch.log
    echo "=================================================================================" >>${1}/backup_arch.log
    
    exit 0

    注意:这里的通配只是满足去掉全备的备份传输,对于归档日志,控制文件和参数文件的备份并没有做进一步区分(如果你的归档文件很大,还需要进一步设计细分)

    3.异机恢复:

    异机恢复核心步骤:
    3.1 参数文件:

    $ strings ORCL.24.1.20180619.SPFILE
    
    [oracle@jystdrac1 orcl]$ pwd
    /u01/oradata/orcl
    [oracle@jystdrac1 orcl]$ vi pfile.ora
    *.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
    *.audit_trail='db'
    *.compatible='11.2.0.4.0'
    *.control_files='/u01/oradata/orcl/control01.ctl','/u01/oradata/orcl/control02.ctl'
    *.db_block_size=8192
    *.db_domain=''
    *.db_name='orcl'
    *.diagnostic_dest='/u01/app/oracle'
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
    *.log_archive_dest_1='LOCATION=/u01/arch'
    *.memory_target=1234173952
    *.open_cursors=300
    *.processes=150
    *.remote_login_passwordfile='EXCLUSIVE'
    *.undo_tablespace='UNDOTBS1'
    
    
    SQL> startup nomount pfile='/u01/oradata/orcl/pfile.ora';
    ORACLE instance started.

    3.2 控制文件:

    RMAN> restore controlfile from '/tmp/ORCL.23.1.20180619.CTL';
    RMAN> alter database mount;
    RMAN> catalog start with '/tmp/';
    RMAN> crosscheck backup;

    3.3 转储文件并恢复到指定时间点:

    RMAN> restore database;
    RMAN> sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
    RMAN> recover database until time '2018-06-19 17:50:00';
    
    --先只读打开确认数据是否符合要求
    SQL> alter database open read only; 
    
    --确认没问题后重新以resetlogs方式打开
    SQL> create spfile from pfile='/u01/oradata/orcl/pfile.ora';
    SQL> startup mount
    SQL> alter database open resetlogs; 

    至此,RMAN备份策略与异机恢复实例演示完成。

  • 相关阅读:
    python之timeit模块
    python isinstance函数
    继承
    冒泡排序&&选择排序
    监听器
    被钝化的代码
    Ajax验证用户名
    原生ajax访问服务器所展现的现象
    今天
    随机点名
  • 原文地址:https://www.cnblogs.com/hftian/p/12696680.html
Copyright © 2020-2023  润新知