oracle-10g-深入理解incarnation 下载本文

内容发布更新时间 : 2024/6/3 21:10:47星期一 下面是文章的全部内容请认真阅读。

深入理解incarnation

10g引入了一个很重要的功能,就是可以跨越resetlogs进行数据恢复。这就需要我们比较深入的了解一个概念,incarnation。

我们通过下面的几个实验,来说明什么是incarnation,希望能对大家有所帮助。 一 准备实验环境

Version 10.2.0.1.0 Platform winxp 1.1进行一次全备份 Rman target /

backup database include current controlfile;;

1.2以scott建立测试表t,并且插入数据 conn scott/tiger

create table t (tscn number(10)); begin

for 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行。

2009-3-26 王力

二、测试不完全恢复后的完全恢复

2.1 进行一次基于scn的不完全恢复 Rman target / run {

startup mount force; set until scn 886019; restore database; recover database;

alter database open resetlogs; }

SQL> select * from t; TSCN ---------- 886010 886013 886015 886017

-- 并不包括886019数据,说明until scn的恢复,并不包括该scn。

2.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 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行。

2.3使用restlogs之前的备份进行完全恢复 run {

startup mount force; restore database; recover database; alter database open ; }

数据库如愿open;

三、测试再次不完全恢复

再次做不完全恢复,恢复点在上次resetlog点之后 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之前

4.1希望恢复到第一次resetlog之前 scn 886019之前 run {

startup mount force; set until scn 886013; restore database; recover database;

alter database open resetlogs; }

4.2遇到错误rman-20208 遇到错误

4.3反清复明,回到incarnation 7.成功open数据库; reset database to incarnation 7; run {

startup mount force; set until scn 886013; restore database; recover database;

alter database open resetlogs; }

成功打开数据库

SQL> select * from t ; TSCN ---------- 886010

4.4总结分析

每一次resetlogs就会使incarnation + 1;

如果想要恢复到之前incarnation的scn,就需要先恢复到之前的incarnation; 至于oracle为什么这么设计,我们通过后面的实验,就能够理解了; 以上实验的过程如下图所示:

BackupIncarnation 10Incarnation 7Incarnation 8Incarnation 9SCN

五、模拟不完全恢复后再次不完全恢复

5.1重新模拟环境 Delete backup;

Backup database include current controlfile;