Oracle 10g后可以跨越resetlogs恢复数据库,incarnation是跨越resetlogs恢复数据库的重要特性。
下面用下列测试来说明下:
SQL> create table incarnation_tab01(id number);
Table created
SQL> declare
2begin
3for i in 1..10 loop
4insert into incarnation_tab01 select dbms_flashback.get_system_change_number from dual;
5commit;
6end loop;
7end;
8/
PL/SQL procedure successfully completed
SQL> select * from incarnation_tab01;
ID
----------
1881030
1881031
1881032
1881033
1881034
1881035
1881036
1881037
1881038
1881039
10 rows selected
RMAN> run{
2> startup mount force;
3> set until scn 1881034
4> restore database;
5> recover database;
6> alter database open resetlogs;
7> }
Oracle实例已启动
数据库已装载
系统全局区域总计373293056字节
Fixed Size1249080字节
Variable Size159383752字节
Database Buffers209715200字节
Redo Buffers2945024字节
正在执行命令: SET until clause
启动restore于26-12月-11
分配的通道: ORA_DISK_1
通道ORA_DISK_1: sid=156 devtype=DISK
通道ORA_DISK_1:正在开始恢复数据文件备份集
通道ORA_DISK_1:正在指定从备份集恢复的数据文件
。。。。。。
通道ORA_DISK_1:正在读取备份段D:ORACLEFULLBACKUP_XIAOYU_20111226_29
通道ORA_DISK_1:已恢复备份段1
段句柄= D:ORACLEFULLBACKUP_XIAOYU_20111226_29标记= TAG20111226T092719
通道ORA_DISK_1:恢复完成,用时: 00:01:45
完成restore于26-12月-11
启动recover于26-12月-11
使用通道ORA_DISK_1
正在开始介质的恢复
存档日志线程1序列17已作为文件D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAX
IAOYUARCHIVELOGARC00017_0770468700.001存在于磁盘上
。。。。。。
介质恢复完成,用时: 00:00:02
完成recover于26-12月-11
数据库已打开
SQL> select * from incarnation_tab01;
ID
----------
1881030
1881031
1881032
1881033
此时数据库执行的是不完全恢复然后resetlogs打开。然后再次insert 10条数据
SQL> declare
2begin
3for i in 1..10 loop
4insert into incarnation_tab01 select dbms_flashback.get_system_change_number from dual;
5commit;
6end loop;
7end;
8/
PL/SQL procedure successfully completed
SQL> select * from incarnation_tab01;
ID
----------
1881030
1881031
1881032
1881033
1883530
1883532
1883534
1883536
1883537
1883538
1883539
1883540
1883541
1883542
如果此时想恢复不完全恢复resetlogs之前的1881038阶段。
RMAN> run{
2> startup mount force;
3> set until scn 1881038
4> restore database;
5> recover database;
6> alter database open resetlogs;
7> }
此时是无法恢复的,部分rman信息
RMAN-03002: set命令(在12/26/2011 10:30:24上)失败
RMAN-20208: UNTIL CHANGE is before RESETLOGS change
恢复在上一个resetlogs打开之前,rman无法只利用resetlogs打开之后的archivelog和redo来恢复,需要resetlogs之前的archivelog。
RMAN> list incarnation;
数据库原型列表
DB关键字Inc关键字DB名DB IDSTATUS重置SCN重置时间
------- ------- -------- ---------------- --- ---------- ----------
11XIAOYU628569583PARENT186105310-10月-11
22XIAOYU628569583CURRENT188103526-12月-11
Rman>run{
Reset database to incarnation 21;
Set until scn 1861053;
Restore database;
Recover database;
Alter database open resetlogs;
}
…..
完成restore于26-12月-11
正在开始介质的恢复
介质恢复完成,用时: 00:00:05
完成recover于26-12月-11
[@more@]