对于RMAN恢复我一直都不是很明白,因为,老是搞不清楚不完全恢复该怎么进行,今天,通过这个实验即是对不完全恢复的实践,
也是希望搞清楚incarnation到底是怎么工作的.很可惜,本人对Oracle的了解还不入门,仅能做一点提示.在文末做为小结.

RMAN> list backup;

List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
1       Full    559.92M    DISK        00:01:08     2016-08-13 20:17:08        =============[第一个时间点]==========
        BP Key: 1   Status: AVAILABLE  Compressed: NO  Tag: TAG20160813T201600
        Piece Name: /home/oracle10/flash_recovery_area/DBINFO/backupset/2016_08_13/o1_mf_nnndf_TAG20160813T201600_cty3w0sx_.bkp
  List of Datafiles in backup set 1
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  1       Full 1080165    2016-08-13 20:16:00 /home/oracle10/oradata/dbinfo/system01.dbf
  2       Full 1080165    2016-08-13 20:16:00 /home/oracle10/oradata/dbinfo/undotbs01.dbf
  3       Full 1080165    2016-08-13 20:16:00 /home/oracle10/oradata/dbinfo/sysaux01.dbf
  4       Full 1080165    2016-08-13 20:16:00 /home/oracle10/oradata/dbinfo/users01.dbf
  5       Full 1080165    2016-08-13 20:16:00 /home/oracle10/oradata/dbinfo/gias01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
2       Full    6.80M      DISK        00:00:02     2016-08-13 20:17:17
        BP Key: 2   Status: AVAILABLE  Compressed: NO  Tag: TAG20160813T201600
        Piece Name: /home/oracle10/flash_recovery_area/DBINFO/backupset/2016_08_13/o1_mf_ncsnf_TAG20160813T201600_cty3yffw_.bkp
  Control File Included: Ckp SCN: 1080190      Ckp time: 2016-08-13 20:17:15
  SPFILE Included: Modification time: 2016-08-13 20:09:59

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
3       Full    560.05M    DISK        00:00:18     2016-08-13 20:26:33         =============[第二个时间点]==========
        BP Key: 3   Status: AVAILABLE  Compressed: NO  Tag: TAG20160813T202615
        Piece Name: /home/oracle10/orabak/fulldb_20160813_919801575
  List of Datafiles in backup set 3
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  1       Full 1080933    2016-08-13 20:26:15 /home/oracle10/oradata/dbinfo/system01.dbf
  2       Full 1080933    2016-08-13 20:26:15 /home/oracle10/oradata/dbinfo/undotbs01.dbf
  3       Full 1080933    2016-08-13 20:26:15 /home/oracle10/oradata/dbinfo/sysaux01.dbf
  4       Full 1080933    2016-08-13 20:26:15 /home/oracle10/oradata/dbinfo/users01.dbf
  5       Full 1080933    2016-08-13 20:26:15 /home/oracle10/oradata/dbinfo/gias01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
4       Full    6.80M      DISK        00:00:01     2016-08-13 20:26:41
        BP Key: 4   Status: AVAILABLE  Compressed: NO  Tag: TAG20160813T202615
        Piece Name: /home/oracle10/orabak/fulldb_20160813_919801600
  Control File Included: Ckp SCN: 1080941      Ckp time: 2016-08-13 20:26:40
  SPFILE Included: Modification time: 2016-08-13 20:09:59

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
5       Full    561.88M    DISK        00:00:19     2016-08-13 20:34:29            =============[第三个时间点]==========
        BP Key: 5   Status: AVAILABLE  Compressed: NO  Tag: TAG20160813T203410
        Piece Name: /home/oracle10/orabak/db_full_bak_20160813_919802050
  List of Datafiles in backup set 5
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  1       Full 1081829    2016-08-13 20:34:10 /home/oracle10/oradata/dbinfo/system01.dbf
  2       Full 1081829    2016-08-13 20:34:10 /home/oracle10/oradata/dbinfo/undotbs01.dbf
  3       Full 1081829    2016-08-13 20:34:10 /home/oracle10/oradata/dbinfo/sysaux01.dbf
  4       Full 1081829    2016-08-13 20:34:10 /home/oracle10/oradata/dbinfo/users01.dbf
  5       Full 1081829    2016-08-13 20:34:10 /home/oracle10/oradata/dbinfo/gias01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
6       Full    6.80M      DISK        00:00:01     2016-08-13 20:34:36
        BP Key: 6   Status: AVAILABLE  Compressed: NO  Tag: TAG20160813T203410
        Piece Name: /home/oracle10/orabak/db_full_bak_20160813_919802075
  Control File Included: Ckp SCN: 1081837      Ckp time: 2016-08-13 20:34:35
  SPFILE Included: Modification time: 2016-08-13 20:09:59

从上面查看备份集的输出可知,当前有三个可用的备份集.分别是:
    1. 2016-08-13 20:17:08
    2. 2016-08-13 20:26:33
    3. 2016-08-13 20:34:29
现在的情况是,已经进行了一次完全恢复,使用的是 第3个时间点的全备.但现在需要恢复第2个时间点的全备.
注: 进行基于时间的备份时需要先导出指定日期格式的变量: export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';  
RMAN> run {
set until time='2016-08-13 20:26:33';
restore database;
recover database;
alter database open resetlogs;
}

executing command: SET until clause
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of set command at 08/13/2016 23:42:18
RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time

恢复时,出现了RMAN-20207的错误,这是进行恢复时,经常会出的错误.这是因为,我们先前恢复了第3个时间点
的全备,并进行了resetlogs,那么Oracle将的incarnation将加1,可以理解为Oracle将resetlogs前的备份集做为上层,
resetlogs后,重新建了一个层,开始重新记录信息.  我们现在要恢复上一层的备份集,就必须先回到上一层.

RMAN> list incarnation;            #查看当前有几个incarnation.

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       DBINFO   3196490228       PARENT  1          2005-10-22 21:44:08
2       2       DBINFO   3196490228       PARENT  525876     2015-06-20 21:23:03
3       3       DBINFO   3196490228       CURRENT 1081970    2016-08-13 23:39:33    #这是当前层.

RMAN> reset database to incarnation 2;

RMAN> list incarnation;

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       DBINFO   3196490228       PARENT  1          2005-10-22 21:44:08
2       2       DBINFO   3196490228       CURRENT 525876     2015-06-20 21:23:03    #此时,它变成了当前层.
3       3       DBINFO   3196490228       ORPHAN  1081970    2016-08-13 23:39:33
4       4       DBINFO   3196490228       ORPHAN  1081972    2016-08-14 00:05:20

RMAN> run {
set until time='2016-08-13 20:26:33';        #使用第二次备份的时间点来进行不完全恢复.
restore database;
recover database;
alter database open resetlogs;
}

executing command: SET until clause

Starting restore at 2016-08-14 00:14:50
using channel ORA_DISK_1
.......
piece handle=/home/oracle10/orabak/fulldb_20160813_919801575 tag=TAG20160813T202615        #可以看到这里使用第二次的备份集.
channel ORA_DISK_1: restore complete, elapsed time: 00:00:55
Finished restore at 2016-08-14 00:15:45

恢复完成后,再次查看incarnation:
RMAN> list incarnation;

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       DBINFO   3196490228       PARENT  1          2005-10-22 21:44:08
2       2       DBINFO   3196490228       PARENT  525876     2015-06-20 21:23:03
5       5       DBINFO   3196490228       CURRENT 1080958    2016-08-14 00:15:47    #当前层在这里.
3       3       DBINFO   3196490228       ORPHAN  1081970    2016-08-13 23:39:33
4       4       DBINFO   3196490228       ORPHAN  1081972    2016-08-14 00:05:20

这时,我们继续将恢复的数据文件gias01.dbf 删除.然后,直接执行:
restore database;        #发现恢复的是第二次备份的全备集.
recover database;
alter database open resetlogs;    #并且,执行它时会报错,因为,Oracle不认为这是不完全恢复.
alter database open;             #因此,直接此命令即可打开数据库.查看incarnation没有发生变化。

那现在要重新恢复第三次备份的备份集,要怎么做?
1. 重新关库,删除gias01.dbf
2. 重设incarnation 为4.
RMAN> reset database to incarnation 4;

RMAN> list incarnation;

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       DBINFO   3196490228       PARENT  1          2005-10-22 21:44:08
2       2       DBINFO   3196490228       PARENT  525876     2015-06-20 21:23:03
5       5       DBINFO   3196490228       ORPHAN  1080958    2016-08-14 00:15:47
3       3       DBINFO   3196490228       ORPHAN  1081970    2016-08-13 23:39:33
4       4       DBINFO   3196490228       CURRENT 1081972    2016-08-14 00:05:20    #可以看到现在已经修改成功.

3. 尝试手动恢复:
restore database;        #这次恢复的是第三次备份的全备集.
recover database;
执行recover database时,出现下面错误,可忽略:
    RMAN-03002: failure of recover command at 06/24/2015 16:02:25
    RMAN-06054: media recovery requesting unknown log: thread 1 scn 277200603

4.进入sqlplus尝试打开数据库:
alter database open resetlogs;    #成功打开.

5.再次查看incarnation:
RMAN> list incarnation;

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       DBINFO   3196490228       PARENT  1          2005-10-22 21:44:08
2       2       DBINFO   3196490228       PARENT  525876     2015-06-20 21:23:03
5       5       DBINFO   3196490228       ORPHAN  1080958    2016-08-14 00:15:47
3       3       DBINFO   3196490228       ORPHAN  1081970    2016-08-13 23:39:33
6       6       DBINFO   3196490228       CURRENT 1081972    2016-08-14 00:39:49    #现在第6层
4       4       DBINFO   3196490228       PARENT  1081972    2016-08-14 00:05:20

实验到此,我又尝试了reset database to incarnation 2; 然后,使用时间恢复第一次备份集,
成功,incarnation+1后为7,然后,我再次回到2,尝试使用时间恢复第一次备份,竟然失败了,然后,
我尝试使用时间恢复第一/二/三都不成功,但可以直接使用restore database来恢复.
    我依然没有完全理解,从实验上看,没次resetlogs后,该层上将记录此次恢复备份集的信息,
并且上个当前层上关于该备份集的信息将被删除。

后记:
    此次实验到最后,出现了一个问题,incarnation 被搞混乱了,我把所有的备份集都删除了,然后,
重新做了两次RMAN全备,每次都看incarnation有什么变化没,结果因为先前reset database to incarnation 3;
两次全备的信息似乎都没有记录到incarnation 3这层,无论我怎么切换,直接用restore database 或 基于时间的
恢复都提示找不到数据文件,将incarnation功能关闭也无法恢复.最终的解决方案是,重建控制文件来解决.

经测试重建控制文件可以重置incarnation.
    这里有需要注意重建控制文件时: resetlogs与noresetlogs的区别
        norestlogs: 控制文件的scn是来自当前日志的最大scn。
        resetlogs:  控制文件的scn是来自数据文件。
    重建控制文件的脚本:
        1. 从$ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.log ,从警告日志中找.
        2. 手动写.
        参考样本:
            Create controlfile reuse database "dbinfo" noresetlogs archivelog
            MAXINSTANCES 8
            MAXLOGHISTORY 1
            MAXLOGFILES 16
            MAXLOGMEMBERS 3
            MAXDATAFILES 100
            LOGFILE
            GROUP 1 '/home/oracle10/oradata/dbinfo/redo01.log' SIZE 51200K,
            GROUP 2 '/home/oracle10/oradata/dbinfo/redo02.log' SIZE 51200K,
            GROUP 3 '/home/oracle10/oradata/dbinfo/redo03.log' SIZE 51200K
            -- STANDBY LOGFILE
            Datafile
            '/home/oracle10/oradata/dbinfo/system01.dbf',
            '/home/oracle10/oradata/dbinfo/undotbs01.dbf',
            '/home/oracle10/oradata/dbinfo/sysaux01.dbf',
            '/home/oracle10/oradata/dbinfo/users01.dbf',
            '/home/oracle10/oradata/dbinfo/gias01.dbf'
            CHARACTER SET ZHS16GBK
            ;
      写好重建控制文件的脚本后,启动Oracle到nomount:
    SQL> startup  nomount
      SQL> @/tmp/create-control-file.sql

Oracle - RMAN备份 之 incarnation的实验和小结的更多相关文章

  1. Oracle RMAN 备份一例

    Oracle RMAN备份一例: Solaris 10 + Oracle 11.2.0.3 Shell:csh,安装有bash,脚本调用bash 备份策略:周日0级备份,周一~周六1级备份,每6小时备 ...

  2. Oracle—RMAN备份(三)

    一.增量备份的相关概念 1. 在前面说明了RMAN的完整备份,完整备份是备份所用使用过的块,不备份没有使用的过的块:增量备份只备份自上次备份以来更改过的块. 2.即使RMAN的默认操作是在增量备份时扫 ...

  3. Oracle—RMAN备份(一)

    一.RMAN备份相关概念 1.RMAN备份中表空间不需要处于backup模式下,它备份数据文件,归档日志文件,控制文件,spfile和备份集片,但不备份联机重做日志文件,临时文件和口令文件. 2.备份 ...

  4. Oracle—RMAN备份(二)

    在Oracle  RMAN备份(一)中,对各种文件在RMAN中备份进行了说明, 一.备份集的复制 在RMAN 备份中,可以备份其自己的备份,即备份一个文件放在多个目录下,oralce支持最多备份四个. ...

  5. ORACLE RMAN备份--差异增量与累积增量的策略实例图

    转自原文 ORACLE RMAN备份--差异增量与累积增量的策略实例图

  6. ORACLE RMAN备份及还原 RMAN能够进行增量备份:数据库,表空间,数据文件

    ORACLE RMAN备份及还原   RMAN能够进行增量备份:数据库.表空间.数据文件 仅仅有使用过的block能够被备份成backup set 表空间与数据文件相应关系:dba_data_file ...

  7. Oracle RMAN备份与还原

    RMAN在数据库服务器的帮助下实现数据库文件.控制文件.数据库文件与控制文件的映像副本.归档日志文件.数据库服务器参数文件的备份. RMAN的特点: (1) 支持增量备份:传统的exp与expdp备份 ...

  8. Oracle Rman备份恢复和管理

    参考资料: Oracle之Rman入门指南 一步一步学Rman Rman简介 Rman-Recover manager恢复管理工具. Oracle集成了很多环境的一个数据库备份和恢复的工具. Rman ...

  9. Oracle RMAN备份策略

    建立增量备份:如果数据库运行于不归档模式下,只能在数据库干净关闭的情况下 ( 以 normal .immediate . transactional 方式关闭 ) 才能进行一致性的增量备份,如果数据库 ...

随机推荐

  1. codeforces 892E(离散化+可撤销并查集)

    题意 给出一个n个点m条边的无向联通图(n,m<=5e5),有q(q<=5e5)个询问 每个询问询问一个边集{Ei},回答这些边能否在同一个最小生成树中 分析 要知道一个性质,就是权值不同 ...

  2. Java添加、提取、替换和删除PDF图片

    (一)简介 这篇文章将介绍在Java中添加.提取.删除和替换PDF文档中的图片. 工具使用: Free Spire.PDF for JAVA 2.4.4(免费版) Intellij IDEA Jar包 ...

  3. JAVA实现选择排序,插入排序,冒泡排序,以及两个有序数组的合并

    一直到大四才开始写自己的第一篇博客,说来实在有点羞愧.今天写了关于排序的算法题,有插入排序,冒泡排序,选择排序,以下贴上用JAVA实现的代码: public class test5 { public ...

  4. 检查nginx配置,重载配置以及重启的方法

    原文  http://blogread.cn/it/article/4549?f=hot1 几个常用的nginx命令 Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信 ...

  5. Dell R420 RAID建立以及系统安装

    http://thefallenheaven.blog.51cto.com/450907/1753472 Dell R420的RAID划分,以及系统安装 3块2T的盘,装好硬盘后开机,这里有3种方式去 ...

  6. 为RAC私有网络配置网卡Bonding

    在RAC的安装部署过程中.并不不过简单的安装完毕了事.整个安装过程要考虑可能出现的单点问题,当中比較重要的是私有网络. 私有网络是RAC节点间通信的通道.包含节点间的网络心跳信息.Cache fusi ...

  7. 积跬步,聚小流------ps有用小技巧,改变png图标颜色

    *  实现效果: 原图:  改动后: *  实现目的: 满足为实现不同界面色彩搭配改动png图标的颜色 *  实现方法: 1.打开Photoshop工具,导入须要进行改动的png图标: 2.对导入的图 ...

  8. fedora下安装xdot和objgraph

    前提:安装好了python 1.先下载xdot-0.6.tar.gz和objgraph-1.8.0-py27-none-any.whl,你也可以在官网上下载其他版本. 2.下载完后,解压. 3.打开终 ...

  9. Linux Grub系统加密、破密、修复

    一.在重新启动系统时候按任意键进入 grub界面  Grub加密 一.title前的密码 修改grub.conf 这种加密只是在用户要进入grub界面的时候提示要输入密码,但是可以正常进入系统,有没有 ...

  10. Hibernate学习(1)简单介绍

    1.什么是Hibernate?           首先,Hibernate是数据持久层的一个轻量级框架.数据持久层的框架有非常多比方:iBATIS,myBatis,Nhibernate,Siena等 ...