RMAN异机恢复注意事项:
1、RMAN 异机恢复的时候,db_name必须相同。 如果说要想改成其他的实例名,可以在恢复成功后,用nid 命令修改。 实例名的信息会记录到控制文件里,所以如果在恢复的时候,如果实例名不一致,恢复的时候会报错。
2、如果恢复的路径和源库不一致,就需要在restore时用set 命令指定新位置。 并且使用switch datafile all将信息更新的到控制文件。在做duplicate的时候,RMAN 会自动根据pfile中的log_file_name_convert和db_file_name_convert来进行set 的转换。 手工restore时,只能使用set 命令。

1. 在恢复机上准备好以下内容:
  》备份文件:
    /ora_rman_backup/20150618/{控制文件.bak ; 数据文件.bak ; 归档日志.bak ; 参数文件.bak; 口令文件.bak}
    注:将rman备份文件放到这里,是因为在源DB上做RMAN备份时指定备份到这里,若不建立同样的目录,
    下面恢复时,就都必须指定RMAN备份文件的位置。

  》OracleDB已经安装好,并且配置了基本环境变量。
  》cd $ORACLE_HOME/dbs
     orapwd file=orapw$ORACLE_SID password=oracle
  》mkdir $ORACLE_BASE/oradata
     mkdir -pv $ORACLE_BASE/admin/$ORACLE_SID/{a,b,dp,u}dump

2. 恢复参数文件
  export ORACLE_SID=udpay
  rman target /
  RMAN> restore spfile to pfile '$ORACLE_HOME/dbs/initdave2.ora' from '/ora_rman_backup/20150618/dave_spfile_16m6qtde_1_1_20110309';
  或
    直接使用从源DB上复制过来的init$ORACLE_SID.ora 文件也可,只要复制到$ORACLE_HOME/dbs下,
  上面的ORACLE_SID配置了,也可以。

3. 还原控制文件
  》修改 参数文件:
    *.control_files='/oracle/oradata/orcl/control01.ctl','/oracle/oradata/orcl/control02.ctl','/oracle/oradata/orcl/control03.ctl'
  》恢复控制文件:
    RMAN> startup nomount;
    RMAN> restore controlfile from '/ora_rman_backup/20150618/ctl_20150618';

4. 启动DB到mount
  RMAN> alter database mount;

5. 恢复archivelog
  RMAN> crosscheck archivelog all; 【含义参看
  RMAN> crosscheck backup of archivelog all;
  RMAN> delete expired archivelog all;
  RMAN> list backup of archivelog all;
  RMAN> restore archivelog from sequence=642; //注:此642是指恢复archivelog时,从Sequence为4620的备份开始还原。
    BS 关键字 大小 设备类型占用时间 完成时间
    ------- ---------- ----------- ------------ ----------
    1 149.20M DISK 00:00:01 22-7月 -16
    BP 关键字: 1 状态: AVAILABLE 已压缩: NO 标记: TAG20160722T152937
    段名:/tmp/archlog_DBINFO_1

    备份集 1 中的已存档日志列表
    线程序列 低 SCN 时间下限 下一个 SCN 下一次
    ---- ------- ---------- ---------- ---------- ---------
    1 642 126150727 19-7月 -16 126275396 22-7月 -16

6. 修改数据文件恢复的新路径【报错参考,见文末尾】
  # 查看恢复的控制文件中记录的redolog的位置.
  # select group#, member from v$logfile;
  注:这些需要放到run 运行块中。
  RMAN> run {
    allocate channel a1 type disk;
    allocate channel a2 type disk;
    set until sequence=4631 thread=1;
    set newname for datafile '/dev/udpay/lv_system01_1024m' to '/oracle/oradata/udpay/1024m_system01.dbf';
    set newname for datafile '/dev/udpay/lv_undo01_8192m' to '/oracle/oradata/udpay/8192m_undotbs01.dbf';
    set newname for datafile '/dev/udpay/lv_tools01_256m' to '/oracle/oradata/udpay/256m_users01.dbf';
    set newname for datafile '/dev/udpay/lv_users01_256m' to '/oracle/oradata/udpay/256m_tools01.dbf';
    set newname for datafile '/dev/udpay/lv_perf_256m' to '/oracle/oradata/udpay/256m_perf.dbf';
    set newname for datafile '/dev/udpay/lv_whtapp_data01' to '/oracle/oradata/udpay/whtapp_data01.dbf';
    set newname for datafile '/dev/udpay/lv_whtapp_data02' to '/oracle/oradata/udpay/whtapp_data02.dbf';
    set newname for datafile '/dev/udpay/lv_whtapp_data03' to '/oracle/oradata/udpay/whtapp_data03.dbf';
    set newname for datafile '/dev/udpay/lv_whtapp_index01' to '/oracle/oradata/udpay/whtapp_index01.dbf';
    set newname for datafile '/dev/udpay/lv_indx01_256m' to '/oracle/oradata/udpay/indx01.dbf';

    restore database; //这里就是直接采用默认RMAN备份路径中恢复数据文件。

    #注: RMAN中使用sql来执行SQL命令时,SQL命令需要用双引号引起来, 并且,双引号内部有单引号,则单引号要写两次.
    # 下面双引号内部的都是单引号,并且都是双写的。
    sql "alter database rename file ''/dev/udpay/lv_redo11_256m'' to ''/oracle/oradata/udpay/256m_redo11.log''";
    sql "alter database rename file ''/dev/udpay/lv_redo12_256m'' to ''/oracle/oradata/udpay/256m_redo12.log''";
    sql "alter database rename file ''/dev/udpay/lv_redo21_256m'' to ''/oracle/oradata/udpay/256m_redo21.log''";
    sql "alter database rename file ''/dev/udpay/lv_redo22_256m'' to ''/oracle/oradata/udpay/256m_redo22.log''";
    sql "alter database rename file ''/dev/udpay/lv_redo31_256m'' to ''/oracle/oradata/udpay/256m_redo31.log''";
    sql "alter database rename file ''/dev/udpay/lv_redo32_256m'' to ''/oracle/oradata/udpay/256m_redo32.log''";
    sql "alter database rename file ''/dev/udpay/lv_redo41_256m'' to ''/oracle/oradata/udpay/256m_redo41.log''";
    sql "alter database rename file ''/dev/udpay/lv_redo42_256m'' to ''/oracle/oradata/udpay/256m_redo42.log''";
    sql "alter database rename file ''/dev/udpay/lv_redo51_256m'' to ''/oracle/oradata/udpay/256m_redo51.log''";
    sql "alter database rename file ''/dev/udpay/lv_redo52_256m'' to ''/oracle/oradata/udpay/256m_redo52.log''";
    sql "alter database rename file ''/dev/udpay/lv_redo61_256m'' to ''/oracle/oradata/udpay/256m_redo61.log''";
    sql "alter database rename file ''/dev/udpay/lv_redo62_256m'' to ''/oracle/oradata/udpay/256m_redo62.log''";

    switch datafile all;
    release channel a1;
    release channel a2;
  }

8. 在RMAN中执行数据库一致性恢复
  rman target /
  RMAN> recover database;
  ------------------------------------------------------------------------------------------------------------------------------
  出现下面错误是正常的:
  RMAN-00571: =========================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===
  RMAN-00571: =========================================
  RMAN-03002: failure of recover command at 06/24/2015 16:02:25
  RMAN-06054: media recovery requesting unknown log: thread 1 scn 277200603
  ------------------------------------------------------------------------------------------------------------------------------

  若失败则回到sqlplus 中尝试:
  sqlplus /nolog;
  SQL> conn / as sysdba
  SQL> alter database open resetlogs;

补充1:
  这是另一次恢复Oracle数据库时,出现的错误:
  RMAN> alter database open resetlogs;
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-03002: alter db 命令 (在 07/24/2016 16:36:40 上) 失败
  ORA-01152: 文件 1 没有从过旧的备份中还原
  ORA-01110: 数据文件 1: '/home/oracle/ora/oradata/dbinfo/system01.dbf'

  上面这个错误,网上有说:是system01.dbf中的头部的SCN与控制文件中记录的数据文件头部SCN不同.
  解决方法:
    数据文件头部start scn比控制文件记录的数据库文件头部SCN要新,那么
  就要使用日志(包括归档日志+联机重做日志)前推控制文件中记录的数据库
  头部SCN与数据文件start scn一致,就能保证打开数据库。
  因为是使用备份的控制文件恢复数据库,那么就必须alter database open resetlogs打开数据库

  sqlplus / as sysdba
  SQL> startup mount
  SQL> recover database using backup controlfile until cancel;

  ORA-00279: 更改 126276941 (在 07/22/2016 15:43:45 生成) 对于线程 1 是必需的
  ORA-00289: 建议:
  /home/oracle/ora/product/11.2.0.3/dbhome_1/dbs/arch1_644_810751417.dbf
  ORA-00280: 更改 126276941 (用于线程 1) 在序列 #644 中

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
  /tmp/redo01.log      #这是手动输入备份的redolog文件.,实际上RedoLog是没有写盘的归档日志.
                #因此,若归档日志都无法恢复时,可以尝试RedoLog来恢复,其中一个应该是可以恢复的.
  ORA-00310: 归档日志包含序列 642; 要求序列 644
  ORA-00334: 归档日志: '/tmp/redo01.log'
  注:
    总共有10个redolog,我都这样执行了一次,不知道是否有必要.
  另注:
    我并不十分明白,这究竟是什么原因,我还尝试了使用ArchiveLog文件来恢复.
  但我发现归档文件依然不包含序列644.最后,我尝试使用“alter database open resetlogs;”
  提示:
    alter database open resetlogs
    *
    第 1 行出现错误:
    ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效
    #  然后,我再次使用:
    alter database open;
    # 竟然打开了。神奇的事件。

补充2:
  执行:第6步时,出现以下错误:
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-03002: restore 命令 (在 07/24/2016 15:47:27 上) 失败
  RMAN-06026: 有些目标没有找到 - 终止还原
  RMAN-06023: 没有找到数据文件4的副本来还原
  RMAN-06023: 没有找到数据文件3的副本来还原
  RMAN-06023: 没有找到数据文件2的副本来还原
  RMAN-06023: 没有找到数据文件1的副本来还原

  此错误:网上描述这是Oracle10以后,出的一个新特性incarnation, 导致的错误。
    注: incarnation 是:为了解决还原resetlogs以前的备份,而出的一个特性;

    

  这个图是我对incarnation的理解:
  意思是第一个不完全恢复到SCN(检查点)700处,resetlogs后,incarnation+1,开始使用数据库
  这时,SCN将从700处继续增加,这时发现有些数据没有,需要在往前还原, 就有了第
  二次不完全恢复,接着再继续使用DB, 第三次,又发现还需要还原,但是, 是还原到
  前一次resetlogs后,SCN增长到800的地方的,但从上图可以很清楚的知道, 现在若直接
  恢复到SCN800处,是第二次resetlogs后,SCN增长到800的地方,但现在要恢复到第一次
  resetlogs后,SCN增长的800的地方,就需要先回到incarnation 1的场景中。在做恢复就可以了。
  即:先reset database to incarnation 1; 在进行不完全恢复。

  还回到上面RMAN恢复时出现错误这个话题:
    由于当前版本是Oracle11.2.0.3,肯定是有Incarnation的问题的, 但事实上,我是做完全恢复,
  不需要incarnation特性,要想关闭它,可以直接修改 $ORACLE_HOME/dbs/init$ORACLE_SID.ora
  文件,将其中的下面两个注释掉,即直接在前面加“#”即可。
    #*.db_recovery_file_dest='/home/oracle/ora/flash_recovery_area'
    #*.db_recovery_file_dest_size=4070572032
  为何要这么做? 【下面是我的理解,仅做参考】
    因为,异机恢复时,Incarnation特性,找恢复的SCN点时,这个SCN可能与备份集中的SCN一样,就像
  上面第一次和第二次都包含SCN800一样,因此,它从当前(就上上图中从第二次resetlogs)的SCN中找
  恢复时指定的SCN点, 而这里是没有这些数据文件的。为了不让Oracle采用这种机制,可将恢复文件
  位置注释掉,这样Oracle就不会到恢复文件目录中找当前resetlogs后的备份集文件了。

第二个错误:
  SQL> startup
  #在Startup时,出现下面这个错误:[下面这个博客总结了这个错误.]
  # http://www.cnblogs.com/kerrycode/p/3656655.html

  ORA-01102: cannot mount database in EXCLUSIVE mode

  出现这种错误的三种情况:
      a、 Oracle的共享内存段或信号量没有被释放;
      b、 Oracle的后台进程(如SMON、PMON、DBWn等)没有被关闭;
      c、 用于锁内存的文件lk<sid>和sgadef<sid>.dbf文件没有被删除。【注:这个文件最好不要删除,而是改名】

Oracle异机恢复的更多相关文章

  1. rman恢复方案和oracle异机恢复

    这篇文章主要介绍了rman恢复方案和oracle异机恢复,需要的朋友可以参考下 注:①恢复的前提是已经做好备份②完全恢复数据库是数据库遇到故障,在恢复时候没有丢失任何已经提交事物数据的恢复不完全恢复数 ...

  2. 使用NBU进行oracle异机恢复

    windows平台的异机恢复,目录不同 1.异机环境准备安装oracle介质安装nbu客户端在异机主机的host文件中添加nbu server主机和原主机信息 2.恢复spfile文件 C:\> ...

  3. ORACLE 异机恢复

    有时候需要将大的数据库发布到客户现场或转移机器时,不得不考虑在异机上恢复已经调整.测试好的库. dumpdp 全备的方法虽然易用,但在处理对象.索引.空间的时候异常的出错,比如:见有些公司,建表.索引 ...

  4. oracle异机恢复测试

    (一)问题背景 最近在生产环境中,开发人员误操作,使用truncate将oracle数据库某个表的数据全部删除了,在删除之后,开发人员发现自己闯祸了,于是联系值班的DBA进行紧急数据恢复. 经过分析, ...

  5. oracle异机恢复参考官方文档

    How to use Rman Duplicate on ASM/RAC/OMF/Single Instance (Doc ID 840647.1) How to perform Rman dupli ...

  6. oracle异机恢复 open resetlogs 报:ORA-00392

    参考文档:ALTER DATABASE OPEN RESETLOGS fails with ORA-00392 (Doc ID 1352133.1) 打开一个克隆数据库报以下错误: SQL> a ...

  7. Hyper-V安装Oracle Linux6_4 Oracle db 12c并使用rman做异机恢复

    本文记录在Windows Server 2012 R2上安装Oracle Enterprise Linux 6.4以及使用RMAN进行进行异机恢复的过程. Windows服务器增加Hyper-V功能 ...

  8. 使用不同用户对Oracle数据库进行异机恢复,失败,错误:Backup file not found in NetBackup catalog

    最近做某数据库恢复演练,数据库版本是10.2.0.4,恢复控制文件一直报错,报错如下,经过反复折腾,原来恢复机上oracle用户不是oracle导致(我的是oraclev4),查看源库oracle用户 ...

  9. Oracle 单实例 迁移到 RAC 实例 -- 使用RMAN 异机恢复

    Oracle 官网有关单实例迁移到RAC的一个步骤说明: How to Convert 10g Single-Instance database to 10g RAC using Manual Con ...

随机推荐

  1. Could not find leader nimbus

    运行storm ui, 然后访问storm ui 的网页的时候,死活跑不起来.后面,根据下面这篇文章的说法, 停止zookeeper 之后,删掉zookeeper 上面的storm 节点, 然后再重启 ...

  2. js 终止执行的实现方法

    终止JS运行有如下几种可能: 1.终止函数的运行的方式有两种 (1)在函数中使用return,则当遇到return时,函数终止执行,控制权继续向下运行 (2)在函数中使用try-catch异常处理,需 ...

  3. 关键路径(AOE)---《数据结构》严蔚敏

    // exam1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include &l ...

  4. android KE or NE分析

    使用arm-eabi-addr2line工具跟踪Android调用堆栈 在通常的C/C++代码中,可以通过响应对内存操作不当引起的Segmentation Fault错误即信号SIGSEGV(11)做 ...

  5. Atomic Builtins - Using the GNU Compiler Collection (GCC) GCC 提供的原子操作

    http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Atomic-Builtins.html gcc从4.1.2提供了__sync_*系列的built-in函数,用 ...

  6. PHP swfupload图片上传实例

    swfupload已经是第二次研究,这次自已整了个简单demo,无奈菜鸟最杯… PHP代码如下: if (isset($_FILES["Filedata"]) || !is_upl ...

  7. 解决Struts配置文件里无提示信息的问题

    (1)在struts2配置文件编写的时候.有可能无法提示所有信息,在配置文件里打个"<" 后,并没有不论什么的提示信息(使用快捷键Alt+/ 也不提示) 原因是下边的  &q ...

  8. unix2dos/dos2unix

    dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter).DOS下的文本文件是以\r\n作为断行标志的 ...

  9. Oracle修改序列(Sequence)起始值问题

    Oracle 序列(Sequence)主要用于生成流水号,在应用中经常会用到,特别是作为ID值,拿来做表主键使用较多. 但是,有时需要修改序列初始值(START WITH)时,有同仁使用这个语句来修改 ...

  10. Ubuntu 16.04安装JDK/JRE并配置环境变量【转】

    本文转载自:http://www.linuxdiyf.com/linux/30302.html 作为一个Linux新手,在写这篇文章之前,安装了几次jdk,好多次都是环境变量配置错误,导致无法登录系统 ...