【Oracle】Oracle Incarnation 解释

Oracle Incarnation 解释

一、Oracle Incarnation 解释

先解释一下我对incarnation的理解吧,incarnation,我把这个叫做数据库实体,不知道其他人怎么个叫法,从含义上看,它指的是一个重置 scn后的数据库场景。一个数据库在刚开始被创建出来时,scn号为1,随着运行,scn不断单调递增,Oracle就是根据scn描述数据库的整个发展 进程,可以说scn就是数据库的时间轴。当数据库正常运行,或者执行完全恢复时,scn只会单调递增直到最新的scn,这样数据库中所有的数据都按照时间 的顺序改变着,但如果数据库出现了人为误操作,需要执行不完全恢复,这时候就得用以前备份的所有数据文件将数据版本回到以前,然后从那个起点开始应用日 志,直到出现人为故障之前的那一刻,但这时,scn并未到达最新的scn,而是到了之前的某个scn,在这一刻,人为故障还未发生。在完成recover … until … 的操作后,所有的数据文件通过应用日志到了统一的一点,但数据库暂时还不能正常打开,因为控制文件中记录的是最新的scn,与应用日志后的数据文件并不一 致,因此无法直接打开数据库回到原始的状态,必须通过resetlogs的方式强制控制文件、重做日志文件以及数据文件的scn一致,此时新打开的数据库 中第一个scn等于应用日志到的最后一条日志的scn号+1(在告警日志文件中可以看到RESETLOGS after incomplete recovery UNTIL CHANGE 145936 这样的信息,打开数据库后的scn则为145937)。数据库每次resetlogs之后,scn和日志序列号都被重置,因此每次resetlogs都会 产生一个新的incarnation,而incarnation的信息存储在控制文件中,在rman中可以通过list incarnation看到实体信息。
Oracle在控制文件中记录实体信息,一方面可以清楚的看到数据实体的发展过程(毕竟resetlogs 对数据库是一个具有较大影响的动作,必须能够清楚的查看到数据库生命期内出现的所有实体信息),另一方面,也可以通过reset database命令选择在rman中将要操作的数据库实体,进而将数据库恢复到某个以前实体对应的数据生命期,这个功能在以前8i的时候是不支持的,从 9i开始,可以重置实体到以前,使用resetlogs之前的备份进行数据库恢复。

概念
Current Incarnation(当前化身):数据库当前正在使用的化身。
Parent Incarnation(父化身):数据库当前化身的上一个化身。在父化身以 OPEN RESETLOGS 打开后,就生成当前化身。
Ancestor Incarnation(祖辈化身):在父化身之前,辗转生成父化身的各个化身。
Direct Ancestral Path(直接祖辈路径 / 宗谱):由数据库的起始化身辗转生成至当前化身的分支路径,包含数据库的历代祖辈及父化身。
Orphan Incarnation(孤儿化身):不在数据库当前化身的宗谱上的数据库其它化身。
Orphaned Backups(孤儿备份):不是数据库当前化身的宗谱上生成的数据库备份。当前化身不能使

二、测试

如下,有多个化身,每执行一次resetlogs就会多出一个化身:
RMAN> list incarnation;

using target database control file instead of recovery catalog

List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time


1 1 ORCL11G 1134496124 PARENT 1 24-AUG-13
2 2 ORCL11G 1134496124 PARENT 925702 21-DEC-19
3 3 ORCL11G 1134496124 PARENT 1651904 16-APR-20
4 4 ORCL11G 1134496124 PARENT 1698562 17-APR-20
7 7 ORCL11G 1134496124 ORPHAN 1698823 17-APR-20
5 5 ORCL11G 1134496124 PARENT 1699912 17-APR-20
6 6 ORCL11G 1134496124 PARENT 1701270 17-APR-20
8 8 ORCL11G 1134496124 PARENT 1703877 17-APR-20
9 9 ORCL11G 1134496124 ORPHAN 1703910 17-APR-20
10 10 ORCL11G 1134496124 PARENT 1703910 17-APR-20
11 11 ORCL11G 1134496124 CURRENT 1706310 17-APR-20

如果我想回复到SCN为1703876时,因为不是当前化身,则需要先重置(跨resetlogs)到1703876时的化身(化身6),再进行恢复,操作如下:

(1)恢复适当的控制文件
RMAN> sql’alter session set nls_date_format=“yyyy-mm-dd hh24:mi:ss”’;
RMAN> restore controlfile from autobackup until time ‘2019-03-12 19:00:00’;

(2)启库到mount状态

(3)将数据库重置为化身 6
RMAN> reset database to incarnation 6;

(4)再进行恢复
RMAN>
run{startup force mount;
set until scn=1703876;
restore database;
recover database;
sql ‘alter database open resetlogs’;}
--------需要保证此间的归档都还在。

三、总结

想要恢复到历史化身时刻,需要恢复相当的控制文件及重置到对应的化身再做恢复,不然无法直接跨resetlogs恢复。

参考如下资料,若有侵权,请联系本人删除,谢谢。
【Oracle Incarnation 详解与Rman跨resetlogs版本恢复(原创) https://blog.csdn.net/czmmiao/article/details/84551234】
【对rman中的incarnation(化身)详解 http://blog.itpub.net/31386161/viewspace-2129757/】

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是在新建Oracle环境中使用RMAN还原的步骤: 1. 安装Oracle数据库软件,创建数据库实例,并将备份文件传输到数据库服务器上。 2. 启动Oracle实例,并连接到数据库。 3. 确认备份的类型和位置。在RMAN中,使用以下命令列出备份集: ``` RMAN> list backup; ``` 4. 确认要还原的数据库的位置和名称。在RMAN中,使用以下命令列出数据库文件: ``` RMAN> list incarnation of database; ``` 5. 使用RMAN的`run`命令开始还原过程。以下是一个简单的还原命令: ``` RMAN> run { allocate channel ch1 type disk; restore database; recover database; alter database open resetlogs; } ``` 此命令将为还原操作分配一个磁盘通道,然后还原整个数据库,并将其恢复到最新的备份集。最后,使用`alter database open resetlogs`命令打开数据库,并重置日志序列号。 6. 如果需要还原单个数据文件,可以使用以下命令: ``` RMAN> run { allocate channel ch1 type disk; restore datafile '/path/to/datafile.dbf'; recover datafile '/path/to/datafile.dbf'; } ``` 此命令将为还原操作分配一个磁盘通道,然后还原指定的数据文件,并将其恢复到最新的备份集。 7. 还原完成后,可以使用以下命令检查数据库的状态: ``` SQL> select status from v$instance; ``` 如果状态为`OPEN`,则表示数据库已经成功打开并可供使用。 请注意,这里只是一个简单的还原过程示例。实际上,还原过程可能更为复杂,具体步骤取决于备份和还原的类型以及数据库的配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值