zoukankan      html  css  js  c++  java
  • HXXXES 高可用双机RMAN异地备份 Notes

    一、总览

    大致上的逻辑如上图,简化细节来归纳,便是 用一个bat脚本来驱动整个备份过程。
     
    二、一些准备工作

    1、为备份所需的脚本,以及最终备份生成的文件创建目录

       开始=》运行=》 cmd
    1. mkdir "D:dba_fileshemes_db_bakHEMESDB1full_daily"
    2. mkdir "D:dba_fileshemes_db_bakHEMESDB1full_dailylog"
    3. mkdir "D:dba_fileshemes_db_bakHEMESDB1full_dailyak_files"
    4. mkdir "D:dba_fileshemes_db_bakHEMESDB1full_dailycontrol_files_bak"
    5. pushd "D:dba_fileshemes_db_bakHEMESDB1full_daily"
    6. write ""> HEMESDB1_BACKUP_FULL_DAILY_by_frk.bat
    7. write ""> HEMESDB1_BACKUP_FULL_DAILY_by_frk.rman
     
     
    OK,到目前为止,D:dba_fileshemes_db_bakHEMESDB1full_daily的目录结构便大致如下 
     
    │  HEMESDB1_BACKUP_FULL_DAILY_by_frk.bat
    │  HEMESDB1_BACKUP_FULL_DAILY_by_frk.rman
    ├─bak_files
    │      
    ├─control_files_bak
    │     
    └─log
     
     

    2、Control file 多路径存放(非必须)

     
    如上图,登录sqlplus ,用alter system set control_files='X:,X:' 来修改,英文逗号分隔,
    上图设置为5个control file存放路径,分别为D盘,F盘,D盘为location disk,F盘为存储

    设置时需要停机,再进行操作系统复制文件,确保配置参数的路径都拥有此文件。

    3、设置操作系统日期格式

    否则rman会报错 "RMAN-00557: 无法打开 MSGLOG"

    4、确认归档模式

    检查是否 开启归档
     
    1. SYS@(10.2)> archive log list
    2. 数据库日志模式非存档模式
    3. 自动存档禁用
    4. 存档终点 USE_DB_RECOVERY_FILE_DEST
    5. 最早的联机日志序列734
    6. 当前日志序列736
     
    没有开启归档,先shutdown 
    1. 连接到:
      OracleDatabase10gEnterpriseEditionRelease10.2.0.5.0-64bitProduction
      With the Partitioning, OLAP,DataMiningandRealApplicationTesting options
      
      SYS@(10.2)> alter system checkpoint;
      系统已更改。
      SYS@(10.2)> alter system flush shared_pool;
      系统已更改。
      SYS@(10.2)> alter system flush buffer_cache;
      系统已更改。
      SYS@(10.2)> shutdown immediate;
      
    也可以在
    Oracle Fail Safe Manager里手动操作Take offline 
     
     
     
    找出parameter file
     
    『注:』这里是用的Win NT的集群,所以是共享存储上的parameter文件,确保在实例发生故障的时候仍然用同样的一份parameter file在备机启动,如果是单机实例则可以直接用 alter system set X=XXX scope=spfile;即可 
     
     
     
    修改如下:
     
     
    1. ##########################
    2. log_archive_format='HXXDB1_ARC%s%t%r.log'
    3. log_archive_dest_1='LOCATION=F:hXXdb1_archive_log'
    ​注意,是用的log_archive_dest_1参数,而不是log_archive_dest,后者用于向后兼容而使用,9i之后的版本不推荐使用此参数。
     
    修改完毕后,
    1. SQL> startup mount;
    2. ORACLE 例程已经启动。
    3. 修改数据库位模式
    4. SQL> alter database archivelog;
    5. 数据库已更改。
    6. SQL> alter database open;
    7. 数据库已更改。
    至此,准备工作完毕
     
    三、配置备份脚本
    1. HXXXSDB1_BACKUP_FULL_DAILY_by_frk.bat
    2. HXXXSDB1_BACKUP_FULL_DAILY_by_frk.rman
    3. ├─bak_files
    4. ├─control_files_bak
    5. └─log
    还记得我们前面的工作路径吗? 我们现在要先完成rman脚本。
     
    1. RUN {
       CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;#备份集有效时间为7天。
      CONFIGURE CONTROLFILE AUTOBACKUP ON;#自动备份控制文件。
      CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:dba_fileshXXXs_db_bakHXXXSDB1full_dailyak_files\%d%F_ctl.bak';
      ##控制文件的备份路径以及格式。 
      ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT 'D:dba_fileshXXXs_db_bakHXXXSDB1full_dailyak_files\%d%T%U';
       BACKUP AS COMPRESSED BACKUPSET DATABASE SKIP INACCESSIBLE format='D:dba_fileshXXXs_db_bakHXXXSDB1full_dailyak_files\%d%T%U_data.bak' FILESPERSET 20
      ##开启CH1通道,压缩的方式备份整个DB,并且跳过不可读的文件
      PLUS ARCHIVELOG FILESPERSET 20##同时备份归档日志
      DELETE ALL INPUT;##备份完归档日志后,将其清空 
      RELEASE CHANNEL CH1;##释放CH1通道
      }
      CROSSCHECK BACKUPSET;##交叉校验备份集
      DELETE NOPROMPT OBSOLETE;##删除过期的备份集 
      
      接着完成bat脚本。
      
      
      rem 整体的思路为
      rem 1、oracle的进程是否存在,因为是windows高可用,双机状态
      rem 2、rman脚本全备份至本地磁盘
      rem 3、RoBocopy拷贝全备份至存储,以达成两地备份
      rem 4、删除15天之前的备份文件
      rem 
      rem 注释RoBoCopy D:dba_fileshXXXs_db_bakHXXXDB1full_dailyak_files F:hXXXsdb1_backup /E /MT:16/MAXAGE:1
      rem 把D盘的对应内容拷贝至F盘,/E 包含子文件夹/MT 线程数量,/MAXAGE 拷贝的文件为最近1天
      rem 
      rem 最后forfiles命令清除15天之前的备份文件,具体参数可以查看forfiles /?帮助
      
      @echo off
      set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 
      set oracle_sid=hemesdb1
      rem 设置oracle_sid,以及nls_lang
      
      tasklist|find /i "oracle.exe"||exit
      rem 判定本机器是否有oracle.exe进程,如果没有则直接退出脚本,不执行后续的备份操作,这样本脚本即可通用于双机实例的环境。
      
      rman target sys/sys的密码@hemesdb1 msglog D:dba_fileshXXXs_db_bakHXXXSDB1full_dailylog\%date:~0,10%.log cmdfile=D:dba_fileshXXXs_db_bakHXXXSDB1full_dailyHXXXSDB1_BACKUP_FULL_DAILY_by_frk.rman
      rem 执行rman备份,msglog为log路径,cmdfile则为rman脚本路径
      
      RoBoCopy D:dba_fileshXXXs_db_bakHXXXSDB1full_dailyak_files F:hXXXsdb1_backup /E /MT:50/MAXAGE:1
      rem RoBocopy拷贝全备份至存储,以达成两地备份,local disk一份,存储一份
      
      forfiles /P F:hXXXsdb1_backup /D -15/C "cmd /c del @file"
      forfiles /P D:dba_fileshXXXs_db_bakHXXXSDB1full_dailyak_files /D -15/C "cmd /c del @file"
      rem 最后forfiles命令清除15天之前的备份文件,具体参数可以查看forfiles /?帮助
      
      exit
      
     
    设置任务计划,定时每日执行 HEMESDB1_BACKUP_FULL_DAILY_by_frk.bat
     
    同样的脚本,同样的配置,一起放到备机上。
     
     
     
     
    至此,WIN NT上的高可用双机多实例rman备份完成。
     
    很高兴你能看到这里,欢迎交流更好的方案, Thanks & Regards.
  • 相关阅读:
    js中图片上传,多次上传同一张不生效
    mysql统计一年12月的数据
    jquery.qrcode.js 生成二维码并支持中文的方法
    layui 的 GitHub 及 Gitee (码云) 仓库
    枚举应用demo
    第十二节 线性回归:波士顿房价预测
    第十二节 gevent多任务
    第十一节 yield实现多任务
    第十节 next和send取生成器的值
    第九节 生成器
  • 原文地址:https://www.cnblogs.com/dap570/p/hxxxs_ha_2instance_rman_backup_notes.html
Copyright © 2011-2022 走看看