深入理解incarnation.doc

上传人:啊飒飒 文档编号:11779536 上传时间:2021-09-07 格式:DOC 页数:10 大小:322KB
返回 下载 相关 举报
深入理解incarnation.doc_第1页
第1页 / 共10页
深入理解incarnation.doc_第2页
第2页 / 共10页
深入理解incarnation.doc_第3页
第3页 / 共10页
深入理解incarnation.doc_第4页
第4页 / 共10页
深入理解incarnation.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《深入理解incarnation.doc》由会员分享,可在线阅读,更多相关《深入理解incarnation.doc(10页珍藏版)》请在三一文库上搜索。

1、深入理解incarnation10g引入了一个很重要的功能,就是可以跨越resetlogs进行数据恢复。这就需要我们比较深入的了解一个概念,incarnation。我们通过下面的几个实验,来说明什么是incarnation,希望能对大家有所帮助。2009-3-27王力一 准备实验环境Version 10.2.0.1.0Platformwinxp1.1进行一次全备份Rman target /backup database include current controlfile;1.2以scott建立测试表t,并且插入数据conn scott/tigercreate table t (tscn n

2、umber(10);beginfor i in 1 . 10 loop insert into t values(dbms_flashback.get_system_change_number); commit; end loop; end;/SQL select * from t; TSCN- 886010 886013 886015 886017 886019 886020 886022 886024 886026 886027已选择10行。实验一、测试不完全恢复后的完全恢复1.1 进行一次基于scn的不完全恢复Rman target /run startup mount force;se

3、t until scn 886019;restore database;recover database;alter database open resetlogs;SQL select * from t; TSCN- 886010 886013 886015 886017- 并不包括886019数据,说明until scn的恢复,并不包括该scn。1.2 继续插入数据SQL begin 2 for i in 1 . 10 loop 3 insert into t values(dbms_flashback.get_system_change_number); 4 commit; 5 end

4、loop; 6 end; 7 /SQL select * from t order by 1; TSCN- 886010 886013 886015 886017 886245 886247 886249 886251 886252 886254 886256 886258 886260 886262已选择14行。1.3使用restlogs之前的备份进行完全恢复run startup mount force;restore database;recover database;alter database open ;数据库如愿open;实验二、测试再次不完全恢复再次做不完全恢复,恢复点在上次r

5、esetlog点之后run startup mount force;set until scn 886262;restore database;recover database;alter database open resetlogs;open 没有问题SQL select * from t order by 1; TSCN- 886010 886013 886015 886017 886245 886247 886249 886251 886252 886254 886256 886258 886260已选择13行。实验三、尝试恢复到第一次resetlog之前3.1希望恢复到第一次rese

6、tlog之前 scn 886019之前run startup mount force;set until scn 886013;restore database;recover database;alter database open resetlogs;3.2遇到错误rman-20208遇到错误3.3反清复明,回到incarnation 7.成功open数据库;reset database to incarnation 7;run startup mount force;set until scn 886013;restore database;recover database;alter

7、database open resetlogs;成功打开数据库SQL select * from t ; TSCN- 8860103.4总结分析每一次resetlogs就会使incarnation + 1;如果想要恢复到之前incarnation的scn,就需要先恢复到之前的incarnation;至于oracle为什么这么设计,我们通过后面的实验,就能够理解了;以上实验的过程如下图所示:实验四、模拟不完全恢复后再次不完全恢复4.1重新模拟环境Delete backup;Backup database include current controlfile;Truncate table t;b

8、eginfor i in 1 . 10000 loop insert into t values(dbms_flashback.get_system_change_number); commit; end loop; end;/SQL select min(tscn),max(tscn) from t; MIN(TSCN) MAX(TSCN)- -886422 9053074.2模拟错误的不完全恢复我希望恢复到scn 900000 ,可是我现在错误的恢复到890000。看是否还能恢复到900000run startup mount force;set until scn 890000;rest

9、ore database;recover database;alter database open resetlogs;SQL select min(tscn),max(tscn) from t; MIN(TSCN) MAX(TSCN)- -886422 889997发现并没有找回我们所希望的数据4.3再次进行不完全恢复SQL select current_scn from v$database;CURRENT_SCN- 908431尝试恢复到900000run startup mount force;set until scn 900000;restore database;recover

10、database;alter database open resetlogs;SQL select min(tscn),max(tscn) from t; MIN(TSCN) MAX(TSCN)- -886422 889997依然并没有恢复到我希望的情况;4.4反清复明后再进行恢复startup mount force;reset database to incarnation 11;run set until scn 900000;restore database;recover database;alter database open resetlogs;SQL select min(ts

11、cn),max(tscn) from t; MIN(TSCN) MAX(TSCN)- - 886422 899997已经恢复到我所希望的情况了;4.5总结分析我之前一直无法理解oracle设置incarnation这个东西干什么用,通过这个实验,我们就能够理解incarnation的作用了;Incarnation 11 and 12都包括scn 900000 的spot所以当incarnation 12 做 until scn的时候,是恢复到当前incarcation 的 scn;但是根据我们的需要,我们需要的是incarnation 11的scn 900000;所以就需要使用reset da

12、tabase to incarnation 11才能找回我们需要的数据;实验五、基于时间的不完全恢复实验四说明了在不同的incarnation中可能存在同样的scn。所以基于scn的不完全恢复需要指定incarnation,但是时间是唯一的,理论上来说可以不管需要恢复点是哪个incarnation,直接可以进行恢复。实际情况是不是这个样子呢?通过下面实验来验证:5.1备份数据库8:55 backup database;5.2进行不完全恢复到9:109:30sql alter session set nls_date_format=yyyy-mm-dd hh24:mi:ss;startup mo

13、unt force;run set until time 2009-03-27 09:10:00;restore database;recover database;alter database open resetlogs;5.3恢复到9:05Startup mount force;run set until time 2009-03-27 09:05:00;restore database;recover database;alter database open resetlogs;同样遇到20207错误5.4恢复incarnation之后再次恢复Reset database to inc

14、arnation 14;run set until time 2009-03-27 09:05:00;restore database;recover database;alter database open resetlogs;5.5总结基于时间的不完全恢复,同样也需要判断until点属于哪个incarnation,可能是所有的不完全恢复,都是需要转换到基于scn的恢复,只是oracle隐含帮你做了这个操作。后记:通过以上几个实验,我们能够基本理解incarnation了;如果实际中需要进行不完全恢复,一定要小心谨慎,因为可能出现更加复杂的情况。比如数据结构不同,控制文件丢失,归档断档等等都会造成更加混乱的局面,但是只要思路清晰,相信这些都不是问题。最后,本实验只是出于我个人的理解。如果有什么不正确,以及疑问,欢迎发送邮件到oraclerlee共同讨论学习进步。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1