关于RMAN recover 过程的讨论

群里苏州-孤星问了一个问题:

先用RMAN backup database,然后做一些操作,在用backup archvivelog all delete input备份归档日志并删除备份过的归档日志。那么RMAN在进行recover的时候,怎么应用备份的归档文件。

我的回答:

在进行recover的时候,会先将备份的归档文件还原到归档目录,然后从这个目录应用归档文件,完成恢复的过程。我们看2个实验。

一.实验一

这个实验是我之前做RMAN同机复制的一个实验。

RMAN同机复制数据库

http://blog.csdn.net/xujinyang/article/details/6837414

1.1RMAN备份的脚本:

RMAN>RUN {

allocate channel c1 type disk;

allocate channel c2 type disk;

BACKUP FORMAT '/u02/backup/orcl_%U_%T' skip inaccessible filesperset 5DATABASE TAG orcl_hot_db_bk;

sql 'alter system archive log current';

BACKUP FORMAT '/u02/backup/arch_%U_%T' skip inaccessible filesperset 5 ARCHIVELOG ALL DELETE INPUT;

backup current controlfile tag='bak_ctlfile' format='/u02/backup/ctl_file_%U_%T';

backup spfile tag='spfile' format='/u02/backup/ORCL_spfile_%U_%T';

release channel c2;

release channel c1;

}

1.2Recover还原的日志:

contents of Memory Script:

{

set until scn697286;

recover

clone database

delete archivelog

;

}

executing Memory Script

executing command: SET until clause

Starting recover at 18-JUL-10 --开始recover恢复数据

allocated channel: ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: sid=155 devtype=DISK

starting media recovery

channel ORA_AUX_DISK_1: starting archive log restore to default destination

--先将归档日志还原到指定的归档目录:log_archive_dest参数指定

channel ORA_AUX_DISK_1:restoring archive log

archive log thread=1 sequence=41

channel ORA_AUX_DISK_1: reading from backup piece /u02/backup/arch_3dlj3bro_1_1_20100718

channel ORA_AUX_DISK_1: restored backup piece 1

piece handle=/u02/backup/arch_3dlj3bro_1_1_20100718 tag=TAG20100718T110111

channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02

---将sequence为41的日志restore到指定的归档日志,然后进行restore。

channel ORA_AUX_DISK_1: starting archive log restore to default destination

channel ORA_AUX_DISK_1: restoring archive log

archive log thread=1 sequence=40

channel ORA_AUX_DISK_1: reading from backup piece /u02/backup/arch_3clj3bro_1_1_20100718

channel ORA_AUX_DISK_1: restored backup piece 1

piece handle=/u02/backup/arch_3clj3bro_1_1_20100718 tag=TAG20100718T110111

channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01

archive log filename=/u01/archivelog/1_40_720642866.dbf thread=1 sequence=40

---将sequence为40的日志restore到指定的归档日志,然后进行restore。

channel clone_default: deleting archive log(s)

archive log filename=/u01/archivelog/1_40_720642866.dbf recid=2 stamp=724679053

archive log filename=/u01/archivelog/1_41_720642866.dbf thread=1 sequence=41

channel clone_default: deleting archive log(s)

archive log filename=/u01/archivelog/1_41_720642866.dbf recid=1 stamp=724679052

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

Finished recover at 18-JUL-10

--- recover结束后,删除所有的还原的归档日志。

1.3从上面这段脚本我们看出,RMAN在duplicate中进行recover归档文件的过程是:

1.3.1.从备份集中将归档文件restore到指定的归档目录。这个目录由log_archive_dest参数指定。然后应用这个归档文件。

1.3.2.从上面的log可以看出,这个recover是按归档文件来的,就是一个接一个的处理。先从备份集中restore一个到归档目录,然后应用它。做完这个做另一个。知道把备份集中所有的归档文件全部recover完毕。

1.3.3.删除所有还原到归档目录的归档日志。(由recover database命令中的delete archivelog参数决定)。

二.实验二

实验一是我进行RMAN duplicate时产生的日志。Duplicate把RMAN的相关命令都组合起来,方便我们来操作。我们可以通过日志看到它的执行过程。

现在直接用RMAN做一个测试,来进一步验证实验一的结果。我按照苏州-孤星的步骤来做,先备份数据库,在备份归档日志。

2.1先看一个我修改过的2个参数:

RMAN> show all;

CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT'F:/backup/orcl_%U.bak';

2.2备份数据库:

RMAN> backup database;

启动backup于24-8月-10

使用通道ORA_DISK_1

通道ORA_DISK_1:正在启动全部数据文件备份集

通道ORA_DISK_1:正在指定备份集内的数据文件

输入数据文件:文件号=00001名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF

输入数据文件:文件号=00002名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF

输入数据文件:文件号=00003名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF

输入数据文件:文件号=00006名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/DBA1.DBF

输入数据文件:文件号=00005名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/DAVE0.DBF

输入数据文件:文件号=00007名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/CATALOG1.DBF

输入数据文件:文件号=00008名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/CATALOG_TS1.DBF

输入数据文件:文件号=00004名称=D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF

通道ORA_DISK_1:正在启动段1于24-8月-10

通道ORA_DISK_1:已完成段1于24-8月-10

段句柄=F:/BACKUP/ORCL_36LM695P_1_1.BAK标记=TAG20100824T232232注释=NONE

通道ORA_DISK_1:备份集已完成,经过时间:00:02:25

完成backup于24-8月-10

启动Control File and SPFILE Autobackup于24-8月-10

段handle=D:/APP/ADMINISTRATOR/PRODUCT/11.2.0/DBHOME_1/DATABASE/C-1247395743-20100824-00 comment=NONE

完成Control File and SPFILE Autobackup于24-8月-10

2.3对数据库做一些修改,这里我们创建一个大表。

SQL> createtable RMAN_TEST as select * from dba_objects;

表已创建。

SQL> select count(*) from RMAN_TEST;

COUNT(*)

----------

72924

SQL> alter system archive log current ;

系统已更改。

2.4备份归档日志

RMAN>backup archivelog all delete input;

启动backup于24-8月-10

当前日志已存档

使用目标数据库控制文件替代恢复目录

分配的通道: ORA_DISK_1

通道ORA_DISK_1: SID=272设备类型=DISK

通道ORA_DISK_1:正在启动归档日志备份集

通道ORA_DISK_1:正在指定备份集内的归档日志

输入归档日志线程=1序列=79 RECID=244 STAMP=727826447

输入归档日志线程=1序列=80 RECID=245 STAMP=727909238

输入归档日志线程=1序列=81 RECID=246 STAMP=727918107

输入归档日志线程=1序列=82 RECID=247 STAMP=727918139

输入归档日志线程=1序列=83 RECID=248 STAMP=727918197

输入归档日志线程=1序列=84 RECID=249 STAMP=727918241

输入归档日志线程=1序列=85 RECID=250 STAMP=727918309

通道ORA_DISK_1:正在启动段1于24-8月-10

通道ORA_DISK_1:已完成段1于24-8月-10

段句柄=F:/BACKUP/ORCL_38LM69N6_1_1.BAK标记=TAG20100824T233150注释=NONE

通道ORA_DISK_1:备份集已完成,经过时间:00:00:15

通道ORA_DISK_1:正在删除归档日志

归档日志文件名=D:/ARCHIVELOG/ORCL_1_79_723633464.ARC RECID=244 STAMP=727826447

归档日志文件名=D:/ARCHIVELOG/ORCL_1_80_723633464.ARC RECID=245 STAMP=727909238

归档日志文件名=D:/ARCHIVELOG/ORCL_1_81_723633464.ARC RECID=246 STAMP=727918107

归档日志文件名=D:/ARCHIVELOG/ORCL_1_82_723633464.ARC RECID=247 STAMP=727918139

归档日志文件名=D:/ARCHIVELOG/ORCL_1_83_723633464.ARC RECID=248 STAMP=727918197

归档日志文件名=D:/ARCHIVELOG/ORCL_1_84_723633464.ARC RECID=249 STAMP=727918241

归档日志文件名=D:/ARCHIVELOG/ORCL_1_85_723633464.ARC RECID=250 STAMP=727918309

完成backup于24-8月-10

启动Control File and SPFILE Autobackup于24-8月-10

段handle=D:/APP/ADMINISTRATOR/PRODUCT/11.2.0/DBHOME_1/DATABASE/C-1247395743-20100824-01 comment=NONE

完成Control File and SPFILE Autobackup于24-8月-10

注意:这里备份了7个归档文件。已经检查,并确认D:/ARCHIVELOG没有了任何归档文件。

2.5Restore database

2.5.1先将数据库关闭,并启动到mount状态。

2.5.2还原数据库

RMAN> restore database;

启动restore于24-8月-10

分配的通道: ORA_DISK_1

通道ORA_DISK_1: SID=260设备类型=DISK

通道ORA_DISK_1:正在开始还原数据文件备份集

通道ORA_DISK_1:正在指定从备份集还原的数据文件

通道ORA_DISK_1:将数据文件00001还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF

通道ORA_DISK_1:将数据文件00002还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF

通道ORA_DISK_1:将数据文件00003还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF

通道ORA_DISK_1:将数据文件00004还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF

通道ORA_DISK_1:将数据文件00005还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/DAVE0.DBF

通道ORA_DISK_1:将数据文件00006还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/DBA1.DBF

通道ORA_DISK_1:将数据文件00007还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/CATALOG1.DBF

通道ORA_DISK_1:将数据文件00008还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/CATALOG_TS1.DBF

通道ORA_DISK_1:正在读取备份片段F:/BACKUP/ORCL_36LM695P_1_1.BAK

通道ORA_DISK_1:段句柄= F:/BACKUP/ORCL_36LM695P_1_1.BAK标记= TAG20100824T232232

通道ORA_DISK_1:已还原备份片段1

通道ORA_DISK_1:还原完成,用时: 00:09:26

完成restore于24-8月-10

2.6应用归档日志

RMAN> recover database;

启动recover于24-8月-10

使用通道ORA_DISK_1

正在开始介质的恢复

通道ORA_DISK_1:正在开始将归档日志还原到默认目标

通道ORA_DISK_1:正在还原归档日志

归档日志线程=1序列=81

通道ORA_DISK_1:正在还原归档日志

归档日志线程=1序列=82

通道ORA_DISK_1:正在还原归档日志

归档日志线程=1序列=83

通道ORA_DISK_1:正在还原归档日志

归档日志线程=1序列=84

通道ORA_DISK_1:正在还原归档日志

归档日志线程=1序列=85

通道ORA_DISK_1:正在读取备份片段F:/BACKUP/ORCL_38LM69N6_1_1.BAK

通道ORA_DISK_1:段句柄= F:/BACKUP/ORCL_38LM69N6_1_1.BAK标记= TAG20100824T233150

通道ORA_DISK_1:已还原备份片段1

通道ORA_DISK_1:还原完成,用时: 00:00:15

归档日志文件名=D:/ARCHIVELOG/ORCL_1_81_723633464.ARC线程=1序列=81

归档日志文件名=D:/ARCHIVELOG/ORCL_1_82_723633464.ARC线程=1序列=82

归档日志文件名=D:/ARCHIVELOG/ORCL_1_83_723633464.ARC线程=1序列=83

介质恢复完成,用时: 00:00:07

完成recover于24-8月-10

注意:

(1)如果你细心一点,你会发现这里没有恢复sequence为79和80的归档。因为这2个日志是我们进行RMAN备份之前的归档文件,RMAN恢复需要的是RMAN备份之后的归档文件,所以只恢复并应用了RMAN备份之后的归档文件。

(2)确认归档目录D:/ARCHIVELOG下生成了从81到85的归档文件。从这里我们可以确定,recover database之后生成的归档文件是否删除由参数DELETE ARCHIVELOG决定,如果加了该参数,在应用完归档之后就会删除还原到归档目录的归档文件。如:

RMAN> RECOVER DATABASE DELETE ARCHIVELOG

这一点,也可以参考Oracle的联机文档:

http://download.oracle.com/docs/cd/B19306_01/backup.102/b14192/recov002.htm


(3)Recover的日志也说明,RMAN从归档日志备份集中应用归档日志的步骤和实验一是一致。都是先还原日志,在应用。

总结:

通过以上2个实验,我们可以理解,RMAN从归档文件备份集中应用归档文件,都是先将归档文件从备份集中还原到归档目录,然后从归档目录中应用,至于是否删除,有recover database的delete archivelog参数决定,加了该参数,在应用完归档文件后就会删除还原的归档文件。

通过这个测试,也提供了一个学习Oracle的方法。多做实验,有什么不明白的,做个实验,自然一切都明了了。


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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值