有关resetlogs和incarnation关系的理解

一、实验环境:

Sqldeveloper+linux in virtual machine

[oracle@lzc ~]$ lsb_release -a

LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch

Distributor ID: RedHatEnterpriseServer

Description:    Red Hat Enterprise Linux Server release 5.4 (Tikanga)

Release:        5.4

Codename:       Tikanga

数据库版本:

SQL> select * from v$version;

 

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE    10.2.0.1.0      Production

TNS for Linux: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production

归档状态:

SQL> archive log;

SP2-0716: invalid combination of ARCHIVE LOG options

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

 

二、实验思想:

对数据库采用rman设置进行 一次备份,然后采用resetlog方式不完全恢复到备份的一个时间点。完成之后再进行第二次不完全恢复,验证是否能够成功。

 

三、实验设计

1、先将数据库进行一次全备连同current controlfile

2、创建测试表,并添加记录

3、进行第一次不完全恢复

5、第二次不完全恢复

 

四、实验步骤:

       1、进行一次数据库全备

RMAN> backup database;

 

Starting backup at 04-AUG-12

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=153 devtype=DISK

channel ORA_DISK_1: starting full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

input datafile fno=00005 name=/u01/app/oracle/oradata/dblzc/soe.dbf

input datafile fno=00001 name=/u01/app/oracle/oradata/dblzc/system01.dbf

input datafile fno=00003 name=/u01/app/oracle/oradata/dblzc/sysaux01.dbf

input datafile fno=00002 name=/u01/app/oracle/oradata/dblzc/undotbs01.dbf

input datafile fno=00004 name=/u01/app/oracle/oradata/dblzc/users01.dbf

channel ORA_DISK_1: starting piece 1 at 04-AUG-12

channel ORA_DISK_1: finished piece 1 at 04-AUG-12

piece handle=/u01/app/oracle/flash_recovery_area/DBLZC/backupset/2012_08_04/o1_mf_nnndf_TAG20120804T222751_81tdc8by_.bkp tag=TAG20120804T222751 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:05:42

channel ORA_DISK_1: starting full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

including current control file in backupset

including current SPFILE in backupset

channel ORA_DISK_1: starting piece 1 at 04-AUG-12

channel ORA_DISK_1: finished piece 1 at 04-AUG-12

piece handle=/u01/app/oracle/flash_recovery_area/DBLZC/backupset/2012_08_04/o1_mf_ncsnf_TAG20120804T222751_81tdp00w_.bkp tag=TAG20120804T222751 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:05

Finished backup at 04-AUG-12

 

2、创建测试表

SQL> create table test(tscn number(10) primary key);

插入数据:

在生气了developer中执行以下语句(注意:该语句在sys用户下执行):

begin

for I in 1..10

LOOP

insert into hr.test values(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER);

commit;

end LOOP;

end;

/

查看数据:

SQL> select * from hr.test;

 

      TSCN

----------

   1224305

   1224306

   1224307

   1224308

   1224309

   1224310

   1224311

   1224312

   1224313

   1224314

 

10 rows selected.

 

3、进行第一次不完全恢复,现在假设我准备恢复到tscn 1224312这一点结果却不小心恢复到1224308这一点。

在执行恢复以前查看当前数据库的incarnation

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       DBLZC    1821208303       PARENT  446075     24-JUN-12

2       2       DBLZC    1821208303       CURRENT 1093399    02-AUG-12

执行恢复

RMAN> run{

2> startup mount;

3> set until scn 1224308;

4> restore database;

5> recover database;

6> alter database open resetlogs;

7> }

connected to target database (not started)

Oracle instance started

database mounted

 

Total System Global Area     285212672 bytes

 

Fixed Size                     1218992 bytes

Variable Size                 83887696 bytes

Database Buffers             197132288 bytes

Redo Buffers                   2973696 bytes

 

executing command: SET until clause

 

Starting restore at 04-AUG-12

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=157 devtype=DISK

 

channel ORA_DISK_1: starting datafile backupset restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

restoring datafile 00001 to /u01/app/oracle/oradata/dblzc/system01.dbf

restoring datafile 00002 to /u01/app/oracle/oradata/dblzc/undotbs01.dbf

restoring datafile 00003 to /u01/app/oracle/oradata/dblzc/sysaux01.dbf

restoring datafile 00004 to /u01/app/oracle/oradata/dblzc/users01.dbf

restoring datafile 00005 to /u01/app/oracle/oradata/dblzc/soe.dbf

channel ORA_DISK_1: reading from backup piece /u01/app/oracle/flash_recovery_area/DBLZC/backupset/2012_08_04/o1_mf_nnndf_TAG20120804T222751_81tdc8by_.bkp

channel ORA_DISK_1: restored backup piece 1

piece handle=/u01/app/oracle/flash_recovery_area/DBLZC/backupset/2012_08_04/o1_mf_nnndf_TAG20120804T222751_81tdc8by_.bkp tag=TAG20120804T222751

channel ORA_DISK_1: restore complete, elapsed time: 00:04:31

Finished restore at 04-AUG-12

 

Starting recover at 04-AUG-12

using channel ORA_DISK_1

 

starting media recovery

media recovery complete, elapsed time: 00:00:05

 

Finished recover at 04-AUG-12

 

database opened

这时再查看test表中数据:

SQL> select * from hr.test;

 

      TSCN

----------

   1224305

   1224306

只有1224308该点以前的记录

 

再次查看当前数据库的incarnation

RMAN> list incarnation;

 

 

List of Database Incarnations

DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time

------- ------- -------- ---------------- --- ---------- ----------

1       1       DBLZC    1821208303       PARENT  446075     24-JUN-12

2       2       DBLZC    1821208303       PARENT  1093399    02-AUG-12

3       3       DBLZC    1821208303       CURRENT 1224309    04-AUG-12

可以发现比恢复前多了一条记录,且incarnation 3为当前使用的database incarnation

 

现在我想再次恢复到我最初想恢复的1224312这点以前,再次执行

RMAN> backup current controlfile;

RMAN> shutdown immediate;

 

database closed

database dismounted

Oracle instance shut down

RMAN> run{      

2> startup mount;     

3> set until scn 1224312;

4> restore database;   

5> recover database;

6> alter database open resetlogs;

7> }

完成之后,查询test表中数据:

SQL> select * from hr.test;

 

      TSCN

----------

   1224305

   1224306

仍然没有恢复我想要的数据。

现在再看incarnation的记录:

RMAN> list incarnation;

 

 

List of Database Incarnations

DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time

------- ------- -------- ---------------- --- ---------- ----------

1       1       DBLZC    1821208303       PARENT  446075     24-JUN-12

2       2       DBLZC    1821208303       PARENT  1093399    02-AUG-12

3       3       DBLZC    1821208303       PARENT  1224309    04-AUG-12

4       4       DBLZC    1821208303       CURRENT 1224322    05-AUG-12

发现又多了一条记录;

现在我将数据库reset  to incarnation 2,再进行以上恢复:

RMAN> backup current controlfile;

RMAN> shutdown immediate;

RMAN> startup mount;

RMAN> reset database to incarnation 2;

 

database reset to incarnation 2

 

RMAN> run{

2> set until scn 1224312;

3> restore database;

4> recover database;

5> alter database open resetlogs;

6> }

恢复成功之后再次查看test表中的内容:

SQL> select * from hr.test;

 

      TSCN

----------

   1224305

   1224306

   1224307

   1224308

   1224309

   1224310

 

6 rows selected.

恢复成功!

查看 incarnation 记录:

List of Database Incarnations

DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time

------- ------- -------- ---------------- --- ---------- ----------

1       1       DBLZC    1821208303       PARENT  446075     24-JUN-12

2       2       DBLZC    1821208303       PARENT  1093399    02-AUG-12

3       3       DBLZC    1821208303       ORPHAN  1224309    04-AUG-12

5       5       DBLZC    1821208303       CURRENT 1224313    05-AUG-12

4       4       DBLZC    1821208303       ORPHAN  1224322    05-AUG-12

发现又多了一条记录,且该记录为the current incarnation of the target database;

 

五、实验小结

每次当你在rman或者sqlplus中执行ALTER DATABASE OPEN RESETLOGS 这条命令之后就会为数据库自动创建一个新的incarnationrecovery catalog中,并且将the new incarnation置为current incarnation

随后对数据库所做的备份和归档等操作都只与the new incarnation 相关。可以通过视图V$DATABASE_INCARNATION 读取new incarnation的记录。

reset database to incarnation #;这条命令之后若current control file is not available则需要

Restore a control file from the old incarnation

 

 

 

 

 

 

 

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26723566/viewspace-739853/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26723566/viewspace-739853/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值