• 关于RMAN recover 过程的讨论


     

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

            

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

     

    我的回答:

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

     

    一. 实验一

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

     

    RMAN 同机复制数据库

    http://blog.csdn.net/tianlesoftware/archive/2010/07/19/5747442.aspx

     

    1.1  RMAN 备份的脚本:

    RMAN>RUN {

    allocate channel c1 type disk;

    allocate channel c2 type disk;

    BACKUP FORMAT '/u02/backup/orcl_%U_%T' skip inaccessible filesperset 5  DATABASE 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.2  Recover 还原的日志:

    contents of Memory Script:

    {

       set until scn  697286;

       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> create  table 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.5   Restore 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 下生成了从8185的归档文件。 从这里我们可以确定,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 的方法。 多做实验,有什么不明白的,做个实验,自然一切都明了了。

     

     

     

     

     

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

    Blog http://blog.csdn.net/tianlesoftware

    网上资源: http://tianlesoftware.download.csdn.net

    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx

    DBA1 群:62697716(); DBA2 群:62697977()

    DBA3 群:63306533;     聊天 群:40132017

    道森Oracle,国内最早、最大的网络语音培训机构,我们提供专业、优质的Oracle技术培训和服务! 我们的官方网站:http://www.daosenoracle.com 官方淘宝店:http://daosenpx.taobao.com/
  • 相关阅读:
    破解Mac版MyEclipse-2017-ci3
    JAVA8 十大新特性详解
    Java 1.8 时间日期库的20个使用示例
    20180206 反射中模块化开发的上课思路
    反射在数据库读写中的应用
    浅谈多线程并发
    Mac OS Git 安装
    MAC node + git + bower 简单安装
    Mac OS 下 eclipse中文乱码解决方法(eclipse for mac 中文乱码)
    【精华】MacOS 10.13.2 环境下安装eclipse
  • 原文地址:https://www.cnblogs.com/tianlesoftware/p/3610020.html
Copyright © 2020-2023  润新知