每次执行OPEN RESETLOGS,数据库将进入新的原型。此时的备份对于数据库来说仍然有效(当
然最好做一次全备,毕竟日志序列号重置,产生的归档可能会覆盖原来的归档)。如果恢复的时
候是基于时间点的恢复,恢复时间点在当前数据库原型之中,一般没什么太大问题。如果恢复
时间点落在了先前的数据库原型中,此时在恢复的时候,需要将数据库打回相应的原型。
SQL> SELECT HANDLE,COMPLETION_TIME FROM V$BACKUP_PIECE;
HANDLE COMPLETION_TIME
-------------------------------------------------- -------------------
E:\BACKUP\FULL_0DL2KM06_1_1.BAK 2010-01-04 17:04:14
E:\BACKUP\FULL_0GL2KM50_1_1.BAK 2010-01-04 17:05:01
E:\BACKUP\FULL_0EL2KM06_1_1.BAK 2010-01-04 17:05:04
E:\BACKUP\FULL_0FL2KM0I_1_1.BAK 2010-01-04 17:05:05
E:\BACKUP\FULL_0HL2KM67_1_1.BAK 2010-01-04 17:05:11
E:\BACKUP\ARC_0IL2KMA7_1_1.BAK 2010-01-04 17:07:28
E:\BACKUP\ARC_0JL2KMA7_1_1.BAK 2010-01-04 17:07:37
E:\BACKUP\ARC_0KL2KMA7_1_1.BAK 2010-01-04 17:07:41
已选择8行。
SQL> SELECT INCARNATION#,STATUS,RESETLOGS_TIME FROM V$DATABASE_INCARNATION;
INCARNATION# STATUS RESETLOGS_TIME
------------ ------- -------------------
1 PARENT 2009-12-02 09:16:22
2 PARENT 2010-01-04 12:03:28
3 ORPHAN 2010-01-07 11:06:13
4 CURRENT 2010-01-07 11:36:16
可见数据的备份时在原型2时备份的。如果恢复时间点落在了当前原型中,和一般恢复没什么区别。
RMAN> RUN{
2> SET UNTIL TIME "to_date('2010-01-07 11:37:09','yyyy-mm-dd hh24:mi:ss')
3> RESTORE DATABASE;
4> RECOVER DATABASE;
5> }
正在执行命令: SET until clause
使用目标数据库控制文件替代恢复目录
启动 restore 于 07-1月 -10
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=155 devtype=DISK
分配的通道: ORA_DISK_2
通道 ORA_DISK_2: sid=154 devtype=DISK
分配的通道: ORA_DISK_3
通道 ORA_DISK_3: sid=153 devtype=DISK
未处理数据文件 8, 因为文件是只读的
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00004恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\USERS01.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\BACKUP\FULL_0DL2KM06_1_1.BAK
通道 ORA_DISK_2: 正在开始恢复数据文件备份集
通道 ORA_DISK_2: 正在指定从备份集恢复的数据文件
正将数据文件00005恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\DATA01.DBF
正将数据文件00007恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\DWIDXTBS01.DBF
正将数据文件00009恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\PERFSTAT01.DBF
正将数据文件00010恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\ROLLBACK01.DBF
通道 ORA_DISK_2: 正在读取备份段 E:\BACKUP\FULL_0EL2KM06_1_1.BAK
通道 ORA_DISK_3: 正在开始恢复数据文件备份集
通道 ORA_DISK_3: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\SYSTEM01.DBF
正将数据文件00002恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\UNDOTBS01.DBF
正将数据文件00003恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\SYSAUX01.DBF
正将数据文件00006恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\DWTBS01.DBF
通道 ORA_DISK_3: 正在读取备份段 E:\BACKUP\FULL_0FL2KM0I_1_1.BAK
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\BACKUP\FULL_0DL2KM06_1_1.BAK 标记 = TAG20100104T170157
通道 ORA_DISK_1: 恢复完成, 用时: 00:01:07
通道 ORA_DISK_2: 已恢复备份段 1
段句柄 = E:\BACKUP\FULL_0EL2KM06_1_1.BAK 标记 = TAG20100104T170157
通道 ORA_DISK_2: 恢复完成, 用时: 00:02:38
通道 ORA_DISK_3: 已恢复备份段 1
段句柄 = E:\BACKUP\FULL_0FL2KM0I_1_1.BAK 标记 = TAG20100104T170157
通道 ORA_DISK_3: 恢复完成, 用时: 00:02:39
完成 restore 于 07-1月 -10
启动 recover 于 07-1月 -10
使用通道 ORA_DISK_1
使用通道 ORA_DISK_2
使用通道 ORA_DISK_3
未处理数据文件 8, 因为文件是只读的
正在开始介质的恢复
存档日志线程 1 序列 133 已作为文件 C:\ARCHIVELOG\ARC00133_0707400208.001 存在于磁盘
上
存档日志线程 1 序列 134 已作为文件 C:\ARCHIVELOG\ARC00134_0707400208.001 存在于磁盘
上
存档日志线程 1 序列 135 已作为文件 C:\ARCHIVELOG\ARC00135_0707400208.001 存在于磁盘
上
存档日志线程 1 序列 136 已作为文件 C:\ARCHIVELOG\ARC00136_0707400208.001 存在于磁盘
上
存档日志线程 1 序列 137 已作为文件 C:\ARCHIVELOG\ARC00137_0707400208.001 存在于磁盘
上
存档日志线程 1 序列 138 已作为文件 C:\ARCHIVELOG\ARC00138_0707400208.001 存在于磁盘
上
...................
...................
存档日志文件名 =C:\ARCHIVELOG\ARC00133_0707400208.001 线程 =1 序列 =133
存档日志文件名 =C:\ARCHIVELOG\ARC00134_0707400208.001 线程 =1 序列 =134
存档日志文件名 =C:\ARCHIVELOG\ARC00135_0707400208.001 线程 =1 序列 =135
存档日志文件名 =C:\ARCHIVELOG\ARC00136_0707400208.001 线程 =1 序列 =136
存档日志文件名 =C:\ARCHIVELOG\ARC00137_0707400208.001 线程 =1 序列 =137
存档日志文件名 =C:\ARCHIVELOG\ARC00138_0707400208.001 线程 =1 序列 =138
存档日志文件名 =C:\ARCHIVELOG\ARC00139_0707400208.001 线程 =1 序列 =139
存档日志文件名 =C:\ARCHIVELOG\ARC00140_0707400208.001 线程 =1 序列 =140
存档日志文件名 =C:\ARCHIVELOG\ARC00141_0707400208.001 线程 =1 序列 =141
存档日志文件名 =C:\ARCHIVELOG\ARC00142_0707400208.001 线程 =1 序列 =142
存档日志文件名 =C:\ARCHIVELOG\ARC00143_0707400208.001 线程 =1 序列 =143
存档日志文件名 =C:\ARCHIVELOG\ARC00156_0707400208.001 线程 =1 序列 =156
.................
.................
介质恢复完成, 用时: 00:01:56
完成 recover 于 07-1月 -10
如果恢复时间落在先前原型中,如果在当前的原型中RESTORE数据文件,会报RMAN-20207:
UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time 错误。
SQL> SELECT INCARNATION#,STATUS,RESETLOGS_TIME FROM V$DATABASE_INCARNATION;
INCARNATION# STATUS RESETLOGS_TIME
------------ ------- -------------------
1 PARENT 2009-12-02 09:16:22
2 PARENT 2010-01-04 12:03:28
3 ORPHAN 2010-01-07 11:06:13
4 CURRENT 2010-01-07 11:36:16
譬如当前数据库原型是4,我们将数据库恢复到2010-01-07 10:54:09,即恢复点落在了原型2中
。
RMAN> RUN{
2> SET UNTIL TIME "to_date('2010-01-07 10:54:09','yyyy-mm-dd hh24:mi:ss'
3> RESTORE DATABASE;
4> RECOVER DATABASE;
5> }
正在执行命令: SET until clause
使用目标数据库控制文件替代恢复目录
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: set 命令 (在 01/07/2010 11:12:04 上) 失败
RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time
此时我们需要将数据库的当前原型设置为恢复时间点所在的数据库原型。本例中为2.
RMAN> RESET DATABASE TO INCARNATION 2;
将数据库重置为原型 2
RMAN> list incarnation;
使用目标数据库控制文件替代恢复目录
数据库原型列表
DB 关键字 Inc 关键字 DB 名 DB ID STATUS 重置 SCN 重置时间
------- ------- -------- ---------------- --- ---------- ----------
1 1 TOMSYAN 3691161958 PARENT 1 02-12月-09
2 2 TOMSYAN 3691161958 CURRENT 3033490099 04-1月 -10
3 3 TOMSYAN 3691161958 ORPHAN 3033706758 07-1月 -10
4 4 TOMSYAN 3691161958 ORPHAN 3033706759 07-1月 -10
RMAN> RUN{
2> SET UNTIL TIME "to_date('2010-01-07 10:54:09','yyyy-mm-dd hh24:mi:ss')";
3> RESTORE DATABASE;
4> RECOVER DATABASE;
5> }
正在执行命令: SET until clause
启动 restore 于 07-1月 -10
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=155 devtype=DISK
分配的通道: ORA_DISK_2
通道 ORA_DISK_2: sid=154 devtype=DISK
分配的通道: ORA_DISK_3
通道 ORA_DISK_3: sid=153 devtype=DISK
未处理数据文件 8, 因为文件是只读的
通道 ORA_DISK_2: 正在开始恢复数据文件备份集
通道 ORA_DISK_2: 正在指定从备份集恢复的数据文件
正将数据文件00005恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\DATA01.DBF
正将数据文件00007恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\DWIDXTBS01.DBF
正将数据文件00009恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\PERFSTAT01.DBF
正将数据文件00010恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\ROLLBACK01.DBF
通道 ORA_DISK_2: 正在读取备份段 E:\BACKUP\FULL_0EL2KM06_1_1.BAK
通道 ORA_DISK_3: 正在开始恢复数据文件备份集
通道 ORA_DISK_3: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\SYSTEM01.DBF
.................
.................
段句柄 = E:\BACKUP\FULL_0EL2KM06_1_1.BAK 标记 = TAG20100104T170157
通道 ORA_DISK_2: 恢复完成, 用时: 00:02:35
通道 ORA_DISK_3: 已恢复备份段 1
段句柄 = E:\BACKUP\FULL_0FL2KM0I_1_1.BAK 标记 = TAG20100104T170157
通道 ORA_DISK_3: 恢复完成, 用时: 00:02:35
完成 restore 于 07-1月 -10
启动 recover 于 07-1月 -10
使用通道 ORA_DISK_1
使用通道 ORA_DISK_2
使用通道 ORA_DISK_3
未处理数据文件 8, 因为文件是只读的
正在开始介质的恢复
存档日志线程 1 序列 133 已作为文件 C:\ARCHIVELOG\ARC00133_0707400208.001 存在于
磁盘上
存档日志线程 1 序列 134 已作为文件 C:\ARCHIVELOG\ARC00134_0707400208.001 存在于
磁盘上
存档日志线程 1 序列 135 已作为文件 C:\ARCHIVELOG\ARC00135_0707400208.001 存在于
磁盘上
.................
.................
介质恢复完成, 用时: 00:02:54
完成 recover 于 07-1月 -10
RMAN> SQL 'ALTER DATABASE OPEN RESETLOGS';
sql 语句: ALTER DATABASE OPEN RESETLOGS
RMAN> LIST INCARNATION;
数据库原型列表
DB 关键字 Inc 关键字 DB 名 DB ID STATUS 重置 SCN 重置时间
------- ------- -------- ---------------- --- ---------- ----------
1 1 TOMSYAN 3691161958 PARENT 1 02-12月-09
2 2 TOMSYAN 3691161958 PARENT 3033490099 04-1月 -10
3 3 TOMSYAN 3691161958 ORPHAN 3033706758 07-1月 -10
4 4 TOMSYAN 3691161958 ORPHAN 3033706759 07-1月 -10
5 5 TOMSYAN 3691161958 CURRENT 3033706759 07-1月 -10