Oracle异机恢复
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异机恢复的更多相关文章
- rman恢复方案和oracle异机恢复
		
这篇文章主要介绍了rman恢复方案和oracle异机恢复,需要的朋友可以参考下 注:①恢复的前提是已经做好备份②完全恢复数据库是数据库遇到故障,在恢复时候没有丢失任何已经提交事物数据的恢复不完全恢复数 ...
 - 使用NBU进行oracle异机恢复
		
windows平台的异机恢复,目录不同 1.异机环境准备安装oracle介质安装nbu客户端在异机主机的host文件中添加nbu server主机和原主机信息 2.恢复spfile文件 C:\> ...
 - ORACLE 异机恢复
		
有时候需要将大的数据库发布到客户现场或转移机器时,不得不考虑在异机上恢复已经调整.测试好的库. dumpdp 全备的方法虽然易用,但在处理对象.索引.空间的时候异常的出错,比如:见有些公司,建表.索引 ...
 - oracle异机恢复测试
		
(一)问题背景 最近在生产环境中,开发人员误操作,使用truncate将oracle数据库某个表的数据全部删除了,在删除之后,开发人员发现自己闯祸了,于是联系值班的DBA进行紧急数据恢复. 经过分析, ...
 - oracle异机恢复参考官方文档
		
How to use Rman Duplicate on ASM/RAC/OMF/Single Instance (Doc ID 840647.1) How to perform Rman dupli ...
 - oracle异机恢复 open resetlogs 报:ORA-00392
		
参考文档:ALTER DATABASE OPEN RESETLOGS fails with ORA-00392 (Doc ID 1352133.1) 打开一个克隆数据库报以下错误: SQL> a ...
 - Hyper-V安装Oracle Linux6_4 Oracle db 12c并使用rman做异机恢复
		
本文记录在Windows Server 2012 R2上安装Oracle Enterprise Linux 6.4以及使用RMAN进行进行异机恢复的过程. Windows服务器增加Hyper-V功能 ...
 - 使用不同用户对Oracle数据库进行异机恢复,失败,错误:Backup file not found in NetBackup catalog
		
最近做某数据库恢复演练,数据库版本是10.2.0.4,恢复控制文件一直报错,报错如下,经过反复折腾,原来恢复机上oracle用户不是oracle导致(我的是oraclev4),查看源库oracle用户 ...
 - Oracle 单实例 迁移到 RAC 实例 -- 使用RMAN 异机恢复
		
Oracle 官网有关单实例迁移到RAC的一个步骤说明: How to Convert 10g Single-Instance database to 10g RAC using Manual Con ...
 
随机推荐
- Ubuntu 16.04安装QQ(不一定成功)
			
注意1:如果是刚新装的系统,可以正常安装,但是,如果你已经装了很多软件,千万不要安装,因为会把系统上一般的依赖包和你之前装的软件全部卸载掉!甚至将桌面Dock都会卸载!最终只能重装Ubuntu解决. ...
 - eclipse导入maven工程步骤
			
转自:http://jingyan.baidu.com/article/cbf0e500a6e3252eaa2893c1.html 感谢作者 步骤一 : 选择 “Import”操作 有两个途径可以选择 ...
 - hash_map与unordered_map区别
			
http://blog.csdn.net/blues1021/article/details/45054159
 - Android拍照、摄像方向旋转的问题 代码具体解释
			
近期做了个拍照.摄像的应用.遇到了拍照.摄像的图像相对于现实.翻转了90度.原因:相机这个硬件的角度是横屏的角度,所以会出现都是横屏的. 1.照相.摄影预览图像的正确角度显 示: public sta ...
 - DacningLinks实现
			
本文简单分析DancingLinks实现中的数据结构设计,给出了精确覆盖问题及其扩展问题的代码.并应用于数独问题. 先简单描写叙述一下精确覆盖问题: 给定一个N*M的01矩阵,从中选中若干行,这些行向 ...
 - Android中的动画具体解释系列【2】——飞舞的蝴蝶
			
这一篇来使用逐帧动画和补间动画来实现一个小样例,首先我们来看看Android中的补间动画. Android中使用Animation代表抽象的动画类,该类包含以下几个子类: AlphaAnimation ...
 - 【Mongodb教程 第一课 】 MongoDB下载安装
			
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++开发.以window平台 ...
 - 在调试C++程序是出现这个问题的解决方案illegal pure syntax, must be '= 0'
			
笔者在调试c++的时候遇见了这个问题 E:\Data Struct\SqString\新建 文本文档.cpp(5) : error C2258: illegal pure syntax, must b ...
 - sparse-PCA(稀疏主成分分析)是什么?
			
不多说,直接上干货! 复杂降维技术有spare-PCA和sparse coding. 最近在科研需要,感谢下面的博主. Sparse PCA 稀疏主成分分析
 - Cocos2d-X-3.0 之后的版本的环境搭建
			
Cocos2d-X-3.0 之后的版本的环境搭建 由于cocos2d游戏开发引擎更新十分频繁,官方文档同步不够及时和完善.所以不要照着官方文档来照做生成工程. <点击图片就能进入网站> ...