ITPub博客

首页 > Linux操作系统 > Linux操作系统 > RMAN 滚动式不完全恢复 小实验

RMAN 滚动式不完全恢复 小实验

原创 Linux操作系统 作者:红叶DBA 时间:2011-04-12 22:17:28 0 删除 编辑
本次试验内容,通过 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博客 ” ,链接:http://blog.itpub.net/24465008/viewspace-692363/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-08-19

  • 博文量
    54
  • 访问量
    69608