本次试验内容,通过 RMAN 的向前滚动式不完全恢复
假定的试验环境:
hongye用户: --> log sequence = 13 的时候创建 current_13 表,并插入13行数据;
--> 归档当前日志,得到日志序列号13;
--> log sequence = 14 的时候创建 current_14 表,并插入14行数据;
--> 归档当前日志,得到日志序列号14;
--> log sequence = 15 的时候创建 current_15 表,并插入15行数据;
--> 归档当前日志,得到日志序列号15;
预期的试验结果: --> 不完全恢复到 sequence = 13 ,发现 current_* 表和数据都不存在;
--> 返回上一个incarnation,继续寻找合适的还原点;
--> 不完全恢复到 sequence = 14 ,发现 current_14/15 表和数据都不存在;
--> 返回上一个incarnation,继续寻找合适的还原点;
--> 不完全恢复到 sequence = 15 ,发现 current_15 表和数据都不存在;
--> 返回上一个incarnation,继续寻找合适的还原点;
--> 不完全恢复到 sequence = 16 ,发现 current_* 表和数据都存在;
--> 不完全恢复完成!
试验结论:次方式可用于不了解具体不完全恢复的截止位置时,作为向后探测式的还原。
1、试验前得测试数据情况:
RMAN 中:
RMAN> list backup summary;
using target database control file instead of recovery catalog
List of Backups
===============
Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
1 B A A DISK 12-APR-11 1 1 NO TAG20110412T203232
2 B F A DISK 12-APR-11 1 1 NO TAG20110412T203242
3 B F A DISK 12-APR-11 1 1 NO TAG20110412T203242
4 B A A DISK 12-APR-11 1 1 NO TAG20110412T203411
以上是当前数据库在试验前的完全备份。
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 HONGYE 2428382369 PARENT 1 30-JUN-05
2 2 HONGYE 2428382369 CURRENT 446075 03-APR-11
--> 对应当前的 incarnation,这个非常重要!
创建试验测试的相关标志数据 current_13、current_14、current_15,此处略去相关步骤 . . . . . .
下面是创建完成之后的结果数据。
SQLPLUS 中:
IDLE > conn /as sysdba
Connected.
SYS:45@hongye > select table_name from dba_tables where wner='HONGYE';
TABLE_NAME
------------------------------
CURRENT_15
-->对应日志序列号13
CURRENT_13
-->对应日志序列号14
CURRENT_14
-->对应日志序列号15
7 rows selected.
SYS:45@hongye > select group#,sequence#, status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 14 INACTIVE
2 15 INACTIVE
3 16 CURRENT
2、首先,恢复到 sequence = 13 的时候,并查看相关数据的恢复情况:
SQLPLUS中:
SYS:45@hongye > shutdown immediate
SYS:45@hongye > startup mount
RMAN 中执行不完全恢复:
RMAN> connect target /
connected to target database: HONGYE (DBID=2428382369, not open)
RMAN> run{
2> set until sequence 13;
3> restore database;
4> recover database;
5> }
. . . . . .
Finished recover at 12-APR-11
SQLPLUS 中查看此次不完全恢复的情况是否和预期情况相符:
SYS:45@hongye > alter database open resetlogs;
SYS:45@hongye > select table_name from dba_tables where wner='HONGYE';
no rows selected
没有 current_* 的表和数据;
SYS:45@hongye > select group#,sequence#, status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 0 UNUSED
2 0 UNUSED
3 1 CURRENT
此时:注意到日志已经归零了,这是 resetlogs 的“后遗症”。
3、恢复到 sequence = 14 的时候,并查看相关数据的恢复情况:
SQLPLUS 中:
SYS:45@hongye > shutdown immediate
SYS:45@hongye > startup mount
RMAN 中执行恢复操作:
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 HONGYE 2428382369 PARENT 1 30-JUN-05
2 2 HONGYE 2428382369 PARENT 446075 03-APR-11
3 3 HONGYE 2428382369 CURRENT 702481 12-APR-11
注意到,此时数据库的生命期已经改变了,incarnation 换到下一个了,
将数据库的生命期设置到2,这样才能使用之前在生命期2中所作的备份
此时:要想继续使用之前的备份和归档文件,则必须将数据库置于 incarnation=2 的生命周期中。
RMAN> reset database to incarnation 2;
database reset to incarnation 2
下面就可以进行不完全恢复,设置恢复的目标位置为: log sequence = 14 ;
RMAN> run{
2> set until sequence 14;
3> restore database;
4> recover database;
5> }
. . . . . .
Finished recover at 12-APR-11
SQLPLUS 中查看恢复后的结果:
SYS:45@hongye > alter database open resetlogs;
Database altered.
SYS:45@hongye > select table_name from dba_tables where wner='HONGYE';
TABLE_NAME
------------------------------
CURRENT_13
此时:表 CURRENT_13 已经被恢复了,因为current_13 表信息的日志记录在 log sequence=13 的log中,
set until sequence 14,则 RMAN 会将日志应用到 13 为止。
SYS:45@hongye > select * from hongye.current_13;
ID NAME
---------- ----------
1 name1
......
13 name13
13 rows selected.
4、恢复到 sequence = 15 的时候,并查看相关数据的恢复情况:
SQLPLUS 中:
SYS:45@hongye > shutdown immediate
SYS:45@hongye > startup mount
RMAN 中执行恢复操作:
同样,也需要在恢复之前,将数据库的生命期设置到2,这样才能使用之前在生命期2中所作的备份。
RMAN> reset database to incarnation 2;
using target database control file instead of recovery catalog
database reset to incarnation 2
RMAN> run{
2> set until sequence 15;
3> restore database;
4> recover database;
5> }
. . . . . .
Finished recover at 12-APR-11
SQLPLUS 中查看恢复后的结果:
SYS:45@hongye > alter database open resetlogs;
Database altered.
SYS:45@hongye > select table_name from dba_tables where wner='HONGYE';
TABLE_NAME
------------------------------
CURRENT_13
CURRENT_14
此时:表 CURRENT_13/14 都已经被恢复了,
因为current_13 表信息的日志记录在 log sequence=13 的log中,
current_14 表信息的日志记录在 log sequence=14 的log中,
set until sequence 15,则 RMAN 会将日志应用到 14 为止。
SYS:45@hongye > select * from hongye.current_13;
ID NAME
---------- ----------
1 name1
......
13 name13
13 rows selected.
SYS:45@hongye > select * from hongye.current_14;
ID NAME
---------- ----------
1 name1
......
14 name14
14 rows selected.
5、恢复到 sequence = 16 的时候,并查看相关数据的恢复情况:
SQLPLUS 中:
SYS:45@hongye > shutdown immediate
SYS:45@hongye > startup mount
RMAN 中执行恢复操作:
同样,也需要在恢复之前,将数据库的生命期设置到2,这样才能使用之前在生命期2中所作的备份。
RMAN> reset database to incarnation 2;
using target database control file instead of recovery catalog
database reset to incarnation 2
RMAN> run{
2> set until sequence 16;
3> restore database;
4> recover database;
5> }
. . . . . .
Finished recover at 12-APR-11
SQLPLUS 中查看恢复后的结果:
SYS:45@hongye > alter database open resetlogs;
SYS:45@hongye > select table_name from dba_tables where wner='HONGYE';
TABLE_NAME
------------------------------
CURRENT_15
CURRENT_13
CURRENT_14
此时:三张表的数据全部都在,由于最晚创建的表 current_15 对应的日志序列号是15,
而本次恢复使用的 until sequence 16 ,RMAN就会应用到 log sequence = 15之后才会停止!
SYS:45@hongye > select * from hongye.current_13;
ID NAME
---------- ----------
1 name1
......
13 name13
13 rows selected.
SYS:45@hongye > select * from hongye.current_14;
ID NAME
---------- ----------
1 name1
......
14 name14
14 rows selected.
SYS:45@hongye > select * from hongye.current_15;
ID NAME
---------- ----------
1 name1
......
15 name15
15 rows selected.
SYS:45@hongye >
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24465008/viewspace-692363/
,如需转载,请注明出处,否则将追究法律责任。