备份恢复5——rman增量累积备份+catalog和nocatalog-阿里云开发者社区

开发者社区> 数据库> 正文

备份恢复5——rman增量累积备份+catalog和nocatalog

简介: 一.Nocatalog  Nocatalog方式 就是用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息,控制文件里面会有越来越多的备份信息。

一.Nocatalog 


Nocatalog方式 就是用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息,控制文件里面会有越来越多的备份信息。因

此,当使用rman nocatalog方式备份时,备份controlfile是非常重要的。

 

由于nocatalog时利用controlfile存放备份信息,建议将Oracle参数文件中的CONTROL_FILE_RECORD_KEEP_TIME值加大(缺省为7天), 参数在$ORACLE_HOME/dbs/initSID.ora中,该参数control_file__record_keep_time设置备份信息保存时间,到规定时间就自动清除以前的备份信息。

SQL> show parameter control

NAME                                 TYPE        VALUE

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

control_file_record_keep_time        integer     7

control_files                        string      D:/APP/ADMINISTRATOR/ORADATA/O

control_management_pack_access       string      DIAGNOSTIC+TUNING


SQL> alter system set control_file_record_keep_time=14 scope=both;

系统已更改。

SQL> select name,value,issys_modifiable from v$parameter where name='control_file_record_keep_time';

NAME        VALUE      ISSYS_MOD

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

control_file_re   14         IMMEDIATE

 

 

 

二.Catalog 


Catalog 则必须要首先要创建目录备份数据库,建立恢复目录。示例如下:

 

1.创建Catalog所需要的表空间

SQL>create tablespace rman_ts  datafile '/u01/oracle/oradata/ora10g/rmants.dbf'  size 20M;

 

2.创建RMAN用户并授权

SQL>create user rman identified by rman default tablespace rman_ts quota unlimited on rman_ts;


SQL>grant recovery_catalog_owner to rman;(grant connect to rman)

 

查看角色所拥有的权限: select * from dba_sys_privs where grantee='RECOVERY_CATALOG_OWNER';

(RECOVER_CATALOG_OWNER,CONNECT,RESOURCE)

 

3.创建恢复目录

oracle>rman catalog rman/rman


RMAN>create catalog tablespace rman_ts;


RMAN>register database;(database是target database)

database registered in recovery catalog

starting full resync of recovery catalog

full resync complete

RMAN> connect target /;

 

以后要使用备份和恢复,需要连接到两个数据库中,命令:

oracle>rman target / catalog rman/rman (第一斜杠表示target数据库,catalog表示catalog目录 rman/rman表示catalog用户名和密码)

命令执行后显示:

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Dec 10 15:00:42 2008

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: ORA10G (DBID=3988862108)

connected to recovery catalog database

 

命令解释:

Report schema              Report shema是指在数据库中需找schema

List backup                   control读取信息

Crosscheck backup       看一下backup的文件,检查controlfile中的目录或文件是否真正在磁盘上

Delete backupset 24      24代表backupset 的编号delete目录,也delete你的文件

 

 

RMAN 备份与恢复 实例

http://blog.csdn.net/tianlesoftware/archive/2009/10/20/4699320.aspx

 

Oracle Rman 命令详解(List report backup configure)

http://blog.csdn.net/tianlesoftware/archive/2009/12/13/4976998.aspx


注意,当使用rman nocatalog恢复时,数据库必须是处于“mount”状态的。而Oracle startup mount的前提条件是control必须存在。因此,你必须在恢复datafile之前先恢复controlfile。 使用rman catalog方式时,可以startup nomount然后restore controlfile;但使用rman nocatalog时,必须先用文件方式恢复controlfile。

下面对比一下rman nocatalog和rman catalog的恢复时的步骤以便建立正确的备份策略(以下的恢复都是在online状态下的备份):

rman nocatalog恢复:
1) 建立oracle运行环境(包括init或sp文件)
2) 文件方式恢复controlfile到init文件指定的位置
3) startup mount
4) rman,恢复datafile
5) alter database open resetlogs

rman catalog恢复:
1) 建立oracle运行环境(包括init或sp文件)
2) rman ,restore controfile
3) alter database mount
4) rman, restore datafile
5) alter database open resetlogs


可以看出,rman nocatalog备份时,必须用文件方式备份controlfile


三、增量备份和累积备份


我们可以用RMAN进行数据库、表空间和数据文件的增量备份。

     如果数据库运行在归档模式,在数据库OPEN状态我们可以进行增量备份;如果数据库处于非归档方式,在数据库CLOSE状态我们也可以进行增量备份。增量备份只备份上次备份以来变化过的数据块。
  每个数据块都包含一个system change number (SCN),记录着该数据块的最后改变。在进行增量备份的时候,RMAN将没给数据块的SCN和父级增量备份的CHECKPOINT SCN进行比较,如果该数据块的SCN大于等于父级的CHECKPOINT SCN,RMAN将备份该数据块。
  为了提高数据库增量备份的性能,我们可以指定变化跟踪文件来监控数据块的改变:

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;


SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE 'd:/rman_change.f'      REUSE;
            SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING; 


  可以通过以下命令查询:
SQL> SELECT FILENAME,STATUS FROM V$BLOCK_CHANGE_TRACKING 

  移动跟踪文件:
SQL>SELECT filename FROM V$BLOCK_CHANGE_TRACKING;
SQL>SHUTDOWN IMMEDIATE;
SQL>HOST COPY OLDFILE NEWFILE
SQL>STARTUP MOUNT;
SQL>ALTER DATABASE RENAME FILE ‘OLDFILE' TO ‘NEWFILE’; 
SQL>ALTER DATABASE OPEN;
             
  如果不能关闭数据库,必须禁用跟踪文件然后移动跟踪文件:


ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;


ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE 'new_location';
             
  增量备份分为两种:差异增量备份累积增量备份。缺省的增量备份是差异增量备份。


  差异增量备份:备份同级或者上级(如果有同级备份,先找同级)备份(差异或者累积)以来变化的数据块。如果找不到同级或者上级(知道LEVEL0),如果ORACLE版本>=10.0.0,RMAN将COPY从数据文件创建开始所有的数据块作为LEVEL1备份;如果ORACLE版本<10.0.0,RMAN将生成LEVEL0备份。


  如下图所示。


  周日:RMAN备份所有被使用过的数据块。周一至周六:RMAN备份自从上次LEVEL0或者LEVEL1备份以来变化的数据块。


  累积增量备份:备份上级备份以来变化的数据块。

如下图所示:


   周日:RMAN备份所有被使用过的数据块。


  周一至周六:RMAN备份自从上次LEVEL0备份以来变化的数据块。      

      


  我们可以看出累积增量备份备份文件要比差异增量备份文件大,因为累积增量备份重复备份了同级别备份的数据块。


  制定一个恰当的备份策略是很重要的,通常我们在有50%的数据块改变的时候,进行一次LEVEL0级别的备份。可以通过以下查询来获得数据块增量备份已经备份50%以上的数据块。


SELECT FILE#, INCREMENTAL_LEVEL, COMPLETION_TIME, BLOCKS, DATAFILE_BLOCKS
  FROM V$BACKUP_DATAFILE
  WHERE INCREMENTAL_LEVEL > 0
  AND BLOCKS / DATAFILE_BLOCKS > .5
  ORDER BY COMPLETION_TIME;

  增量备份示例:


RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;
RMAN> BACKUP INCREMENTAL LEVEL 1 TABLESPACE SYSTEM DATAFILE 
                                 'ora_home/oradata/ tools01.dbf';
RMAN> BACKUP INCREMENTAL LEVEL = 1 CUMULATIVE TABLESPACE users;
             

  增量追加备份:前滚镜像拷贝


  ORACLE文档原文:Incrementally Updated Backups: Rolling Forward Image Copy Backups.


  增量追加备份工作原理:首先创建一个文件镜像拷贝,然后定期把从上次镜像拷贝最大SCN以来变化的数据块追加到镜像拷贝文件中。增量追加备份可以达到快速恢复的目的,如果是每天进行增量追加的话,在进行恢复的时候,我们最多应用一天的REDO数据就可以完成恢复。


  创建增量追加备份,格式如下:


BACKUP... FOR RECOVER OF COPY WITH TAG 




  一个基础的增量追加备份示例:简称basic脚本:


RUN ...{
   RECOVER COPY OF DATABASE WITH TAG 'incr_update';
   BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update'
       DATABASE;
   }
             




  为了理解上述脚本,我们先看一下如果没有数据文件拷贝和增量备份运行这两个脚本的情况。


  1、如果没有LEVEL0备份或者备份文件拷贝,执行BACKUP INCREMENTAL LEVEL 1…… FOR RECOVER OF COPY WITH TAG……不能产生LEVEL1增量备份文件,但是RMAN会按照指定的tag在DATAFILE对应的目录下创建一分镜像文件拷贝。


  2、如果没有LEVEL0备份或者备份文件拷贝,执行RECOVER COPY OF DATABASE WITH TAG……则生成一些信息但是不产生错误。


  我们看一下整个basic脚本的执行情况:


  第一次运行该脚本没有数据文件拷贝和增量备份所以执行RECOVER COPY OF DATABASE WITH TAG 'incr_update'没有任何结果;执行BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE将产生数据文件的镜像文件拷贝。


  第二次运行该脚本,由于第一次运行的时候BACKUP INCREMENTAL LEVEL 1…… FOR RECOVER OF COPY WITH TAG……命令产生一个镜像文件拷贝,但是没有LEVEL1的增量备份,所以执行RECOVER COPY OF DATABASE WITH TAG 'incr_update'还是没有任何结果;执行BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE将产生LEVEL1增量备份。


  第三次运行该脚本,执行RECOVER COPY OF DATABASE WITH TAG 'incr_update'命令将把第二次执行该脚本产生的LEVEL1增量备份追加到镜像文件拷贝,同时又产生一个新的LEVEL1增量备份文件。


  以后再执行该脚本都是把上次产生的LEVEL1的增量备份追加到镜像文件拷贝,然后再产生一个新的LEVEL1的增量备份文件。


  如果需要恢复,我们首先恢复镜像文件拷贝和最后一次LEVEL1增量备份,最后应用REDO.

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章