一. RMAN 备份的一些优点

1. RMAN 会检测和报告损坏的数据块。

2. 不需要将表空间置入热备份模式,RMAN 就可以连接备份数据库。 热备份期间会额外的生成重做日志。

3. RMAN 会自动跟踪新的数据文件和表空间,这样就不再需要在脚本中添加新的表空间和数据文件。

4. RMAN 只备份使用过的数据库(直至最高使用标记(High wate mark)),这样RMAN 备份映像通常小于联机备份的备份脚本。

5. RMAN 提供备份映像的实际压缩。

6. RMAN 提供自动且方便的备份,还原和恢复操作。 RMAN 跟踪恢复数据库所需要的所有备份,在要求还原操作时需要使用这些备份,并且只还原必要的对象。

7. RMAN 可以与第三方介质管理产品一起无缝的工作。

8. RMAN 支持增量备份策略。

9. 可以使用RMAN 来测试备份而不要实际还原他们。

二. RMAN 兼容性问题

在启动备份操作之前,需要考虑一些兼容性问题。在一个企业中,可能会运行不同的Oracle 版本,因此我们在设计备份策略时必须考虑RMAN 的兼容性问题。 

下表是Oracle 兼容性的一个参照表:


RMAN 目标数据库版本

(应用补丁)



RMAN 客户端版本

(应用补丁)



RMAN 目录数据库版本

(应用补丁)



RMAN 目录模式版本

(应用补丁)



9.0.1



9.0.1



>=8.1.7



>=RMAN 客户端



9.2.0



>=9.0.1.3 并且<= 目录数据库可执行文件版本



>=8.1.7



>=RMAN 客户端



10.1.0



>=9.0.1.3 并且<=目录数据库可执行文件版本



>=9.0.1



>=RMAN 客户端



10.2.0



>=9.0.1.3 并且<=目录数据库可执行文件版本



>=9.0.1



>=RMAN 客户端


表中的 目录模式版本 可以从RCVER 表中查看:

SQL> conn rman/rman@orcl; -- 用catalog 用户登录

已连接。

SQL> select * from rcver;

VERSION

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

11.02.00.01

三. 监控RMAN 备份情况

RMAN 在备份期间产生输出,如果在启动RMAN 时启用登录,则取消该输出。可以通过查看生成的日志文件来监控RMAN 操作,或者通过V$RMAN_OUTPUT 视图来查看。

SQL> conn /@orcl as sysdba;

已连接。

SQL> select output from v$rman_output order by stamp;

四. 脱机RMAN 数据库备份

4.1 使用默认的设置执行备份操作:

RMAN 会有一些参数有默认值,在没有更改这些参数的情况下,我们也可以进行备份。 此时备份集将会备份到闪回区中。我们可以用catalog 模式或者是非catalog 模式来连接RMAN。 如果采用catalog 模式,只需在连接的时候加上catalog 参数即可。 不过要注意的是,一般建议在服务器本地直接连接RMAN,然后通过网络连接来连接catalog目录。

执行脱机备份操作时,数据库必须处于mount 状态。 一些命令如下:

Shutdown immediate

Startup mount

Backup database

或者

Backup as compressed backupset database  -- 将数据库作为压缩的备份集来备份

C:/Users/Administrator.DavidDai>rman target '/@orcl as sysdba'; 

恢复管理器: Release 11.2.0.1.0 - Production on 星期一 6月 21 23:24:47 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

连接到目标数据库: ORCL (DBID=1247395743)

RMAN> 

C:/Users/Administrator.DavidDai>rman target '/@orcl as sysdba' catalog 'rman/rman@orcl';

恢复管理器: Release 11.2.0.1.0 - Production on 星期一 6月 21 23:25:24 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

连接到目标数据库: ORCL (DBID=1247395743)

连接到恢复目录数据库

RMAN>

4.2 不使用默认参数执行脱机备份操作

先来看一段脚本:

Shutdown immediate

Startup mount

Run

{

Allocate channel c1 device type disk format 'D:/backup/sid_%U';

Allocate channel c2 device type disk format 'E:/backup/sid_%U';

Backup as compressed backupset database;

Backup current controlfile;

}

相关说明如下:

4.2.1 将数据库启动到mount 模式

在前面也说了,脱机备份,数据库必须启动到mount 状态。

4.2.2 运行Oracle

执行run 代码块。 在完整的语句块输入之前,Oracle 不会运行任何语句。

4.2.3 分配通道

先看一下 备份集 和 备份片。 通常情况下,每次创建一个通道时,都会创建一个或者多个备份集。

备份集(backup set): 逻辑实体,我们会为每个定义的通道创建一个或多个备份集(通常为每个通道创建一个备份集)。

备份片(backup piece):驻留备份数据的实际物理文件。 每个备份集可以关联一个或多个备份片。

可以使用backup 命令(或配置一个默认值)来控制整个备份集的大小,也可以使用allocate channel 命令(或在配置默认通道时配置一个默认值)来控制整个备份片的大小。

Allocate channel 命令定义给定通道(进而是一个备份集)所分配到的设备。设备可以是磁盘(type disk),也可以是磁带驱动器(type sbt)。如果为磁带系统分配通道,可能要在这条命令中加入MML 供应商所要求的特定参数设置。 比如Veritas Netbackup 为磁带分配通道的allocate channel 命令:

Allocate channel t1 type sbt parms='ENV=(NB_ORA_CLASS=RMAN_DB01');

执行这条命令可以为磁带分配一个通道。 为备份分配完两个通道后,RMAN 会在这两个通道间自动并行处理备份流。 由于分配了两个通道,因此会创建两个备份集,并且每个备份集拥有一个备份片。 备份片的大小按字节计算,不过也可以根据需要使用K,M或者G 占位符来分来表示。 如:

Allocate channel t1 type disk maxpiecesize=100M;

在这个示例中,我们限定了通道t1 通道创建备份集中每个备份片的大小不能超过100M。 这样能够最好的保证所创建的单个备份片大小不会超出磁带或者文件系统的处理范围。 

Allocate channel t1 type disk maxpiecesize=100M format='D:/backup/sid_%U.bak';

在这个示例中,使用了format参数来定义备份片被放入磁盘的位置以及备份片的命名约定。 这里的%U 是格式占位符,以确保备份片名称的唯一性。

关于占位符的更多信息,参考 blog: 

4.2.4 备份操作

在示例代码中,分配通道之后,就使用backup 命令来备份数据库。 执行backup database 命令的结果是RMAN开始使用所创建的两个通道备份数据库。

默认情况下,如果只备份数据文件,backup 命令也会备份控制文件和服务器的参数文件(spfile)。 在这种情况下,控制文件备份的存储位置取决于controlfile autobackup 参数的设置。 如果controlfile autobackup 参数被设置为off,控制文件和服务器参数会被包含在数据库备份集中;如果controlfile autobackup 参数被设置为on,控制文件和服务器参数文件就会生成一个独立的控制文件备份。 可以在backup database 命令中加入include current controlfile 子句,迫使RMAN 将控制文件放入数据库备份集。 最好是单独备份控制文件,以确保备份的是当前的控制文件。 

五. Backup 命令选项

5.1 压缩

默认情况下,RMAN 执行NULL 数据块压缩。

5.1.1 NULL 控制压缩

使用这种形式的压缩时,Oracle不会备份未使用的数据块。 执行NULL 数据块压缩的情形有一下两种情况:

(1)从未使用过的数据块不被压缩

(2)在给定的特定标准下,使用过一次的数据块也不被备份。

在第一种情况下,将不会备份其中一直没有数据的所有数据块,在第二种情况下,如果数据库和关联的数据库满足某种标准,空块将不被备份,即使它在某个时刻包含数据。 下面是允许RMAN 不备份这些数据块所必须满足的条件:

(1) 将兼容参数设置为10.2

(2) 没有为数据库定义任何有保证的还原点。

(3) 本地管理数据文件

(4) 备份是备份集,并且完全备份或者零级增量备份。

(5) 备份集在磁盘上创建。

如果满足上述条件,Oracle 将不会备份任何未使用的块,并且备份将因此占用磁盘或磁带上较少的空间。

5.1.2 RMAN 备份压缩

RMAN 可以将压缩算法应用于备份集,从而减小RMAN 创建的备份集的大小。 RMAN 压缩可以在很大程度上减小备份集的大小。 有时,压缩可能非常有效。如在测试数据库中,当使用压缩备份时,备份集映像的大小可以减小70%。如果没有配置数据库自动压缩备份集,可以使用 as compressed backupset 参数来创建压缩备份集。 如果已经配置了压缩并且不希望在给定的backup 命令中使用压缩,则只需使用backup as backupset 参数即可。

5.2 标记

可以为Oracle中的每个备份指派一个标记(tag)。标记可应用于完全备份,表空间备份,数据文件备份,增量备份甚至备份副本。 示例如下:

Backup database tag='TEST';

需要注意的是:使用了tag 参数来标记这个完全备份。每个标记都应当是唯一的,如果没有指定一个命名约定,RMAN 就会使用默认约定为每个备份集分配一个标记。 相同的标记可以应用与多个备份,并且默认情况下只还原最新的备份。

5.3 限定备份的影响

为了帮助减少RMAN备份对其他进程的整体I/0影响,RMAN提供了backup命令的duration 参数。 Duration 参数类似与闹钟,如果备份运行时间超过指定的持续时间,RMAN将取消备份。 如:

Backup duration 00:30 database;

注意事项: 不可以使用backup database plus archivelog命令。 Duration 参数也可以用来抑制备份。 当定义持续时间时,可以让RMAN 使以下因素之一最小化:

(1)备份运行时间

(2)备份使用的I/0 负载

如果尝试最小化备份运行时间,RMAN 将预先全速备份。 这是默认设置。 使用默认的minimize time 参数的另一个特性是,RMAN 将区分备份的数据文件的优先级。 最近备份的数据文件具有较低的优先级,而较早备份的数据文件具有较高的优先级。 

也可以让RMAN 尝试将备份的I/O 操作分布到持续时间内的各个时间点上,从而消除备份对系统的整体影响。

Backup duration 00:30 minimize time database;

Backup duration 00:30 minimize time database;

使用duration 参数,可以指示RMAN如何处理超出backup duration时间限制的备份。 当使用partial 参数时,如果备份因为超出duration 参数的持续时间而终止,RMAN 不会将其作为失败的备份进行处理。 因此,任何run 代码块中的剩余命令将继续执行。 因此,如果接下来还有backup 命令,例如归档的重做日志备份,使用这个参数就会很方便。  无论partial 参数的设置是什么,机制整个备份过程没有完成,Oracle 也会将成功完成的备份集认为是可用的。 

5.4 限定备份集大小

Backup database maxsetsize=50m tag='TEST';

在这个示例中,我们设定备份集的大小不超过50mb。 如果磁带的大小有限制,或者磁盘只能处理一定大小的数据文件,是哦那个这个参数就非常方便。 Oracle 将备份分成多个备份集,每个备份集都不会超出所定义的maxsetsize参数值。

但是maxsetsize 参数限制了单个备份集的总大小。 因此,如果备份集中的数据文件大小超过了定义的限定范围,备份操作就会失败。因此使用该参数要特别小心。

有时,也可以使用allocate channel 命令的maxpiecesize 参数来完成这个操作。 也可用configure 命令创建备份集大小的默认限定值和备份大小的限定值。

5.5 修改备份集的保存策略

我们可以使用keep 参数来重写默认的保存策略。 

Backup database keep forever;

Backup database keep until time='sysdate+180';

在第一条语句中,会永远保存备份,第二条语句中,只保存180天。

5.6 重写configure exclude 命令

通过执行configure exclude 命令可以配置RMAN,排除上一次备份以来没有发生变化的数据文件。 如果要确保RMAN 备份这些数据文件,可以在下面的backup 命令中添加noexclude 参数:

Backup database noexclude keep forever tag='TEST';

5.7 使用backup 命令检查数据库的错误

RMAN 不需要执行备份操作就可以扫描数据库的物理错误和逻辑错误。 使用backup 命令的validate 参数可以实现这个功能。 如:

Backup validate database;

5.8 跳过脱机的,不可读取的或者只读的数据文件

有时候,数据库中的数据文件可能处于Online 以外的状态,如果数据文件是只读的,在备份数据库时可能不要每次都备份这些只读的数据文件。 如果数据文件是脱机的或者不可存取的,假如没有执行特别的操作来指示RMAN跳过这些缺少的数据文件,RMAN 备份操作就会失败。 因此需要使用skip 参数,使用该参数可以根据需要跳过脱机的,只读的或者不可存取的数据文件。 如:

Backup database skip readonly;

Backup database skip offline;

Backup database skip inaccessible;

Backup database skip readonly skip offline skip inaccessible;

Inaccessible 参数可以使Oracle 跳过不能读取的数据文件,这些文件没有实际地存在于磁盘上(如已删除或者转移位置),使用offline 参数可以跳过脱机的但仍存在的数据文件。 Skip readonly参数可以使Oracle 跳过只读的数据文件。 也可以使用configure 配置Oracle 不备份只读的表空间。

5.9 强制备份只读的数据文件

我们可以用configure 命令来配置Oracle 不备份没有发生变化的表空间。 但是如果要执行一个忽略这个配置的特定备份操作,可以用force 参数。

Backup database force;

5.10 基于上次备份时间来备份数据文件

Oracle允许用户在备份进程中指示只备份给定时间以来没有备份过的数据文件。 如果在数据库中添加了新的数据文件,或者只想备份给定天数内发生变化的数据文件,使用Oracle的这个功能就非常方便。 

5.10.1 只备份添加的数据文件

假设在数据库上添加了4个新的数据文件,我们希望不备份整个数据库,而是备份这些新的数据文件。 我们除了只备份单个数据文件外,还有一种更简单的方法:使用backup 的net backed up 选项. 如:

Backup database not backed up;

5.10.2 备份指定时间周期内没有被备份的数据文件

我们可能需要在指定的时间备份指定的数据文件。 如重新启动一个失败的备份操作,使用since time 选项也是非常方便的。 如果备份操作失败,可以在排除这个故障后使用since time 选项来重新启动这个备份操作。如:

Backup database not backed up sine time='sysdate-2';

这时,rman 会备份最近2天内没有备份的数据文件。 注意的是,我们可以用NLS_DATE格式来表示时间,也可以使使用SQL 日期表达式来表示时间。

5.11 在备份操作期间检查逻辑讹误

在默认情况下,RMAN 会检查数据库数据块的逻辑讹误。 如果发现了任何讹误。备份就会失败,这是默认情况。 如果需要更多的错误检查,可以使用backup 命令的check logical 选项来配置备份操作执行逻辑讹误检查。 如:

Backup check logical database;

Backup validate check logical database;

在第一条命令中,rman 会在检查逻辑讹误的同时物理备份数据库。 第二条命令中,RMAN 只验证数据库数据块,它只是执行逻辑数据库验证操作,而不执行实际的数据库物理备份操作。 注意的是:如果要在给定的错误数内仍然继续执行备份操作,就需要先设置maxcorrupt 参数值。 如下所以,需要使用run 代码块来设置maxcorrupt 参数值:

Run{

Set maxcorrupt for datafile 1,2,3,4,5,6,7 to 10;

Backup validate check logical database;

}

5.12 在RMAN 复制设备上生成备份副本

有时,我们可能需要创建备份集片的多个副本。 这可以通过配置默认的生成,也可以使用copies 参数对某个备份进行配置来创建备份片的多个副本(还可以使用set backup copies 参数来完成这个功能)。 下面是一个使用copies 选项生成副本的示例:

Backup database copies=2;

我们可能配置两个不同的默认通道: 一个用于磁盘操作,一个用于磁带操作。使用device type 参数可以定义启动备份操作时要使用的自动通道设备。 

Backup database device type disk;

Backup database device type disk;

5.13 备份控制文件

Include current controlfile 选项会创建当前控制文件的快照,并且会将这个快照控制文件放入使用backup 命令生成的每个备份集中。 如:

Backup database device type disk include current controlfile;

在默认情况下,如果备份数据文件,无论如何都会备份控制文件,因此,如果要执行表空间备份操作或者数据文件备份,使用include current controlfile 参数就非常方便。 如果配置了控制文件的自动备份操作,上面的命令还会将当前的控制文件存储在备份集中。 这样我们就有两个控制文件的副本。

六. Set 命令介绍

使用set 命令可以定义只应用于当前RMAN会话的设置。 Set 命令的设置不是永久的,根据实际需求,可以采用两种方式来使用set 命令。 

在run 代码块外,我们可是执行下面的操作:

(1)使用set echo 命令在消息日志中显示RMAN 命令。

(2)使用set dbid 命令指定一个数据库的数据库标识符(database identifier: dbid)。

某些set 命令只能在run代码块的限定范围内使用,常见的有:

(1)set newname 命令:用于执行表空间时间点恢复(TSPITR)或者数据库复制操作。 该命令允许指定新的数据库数据文件名。 将数据库移动到新的系统中并且文件系统名不同时,我们可以使用这个命令。使用set newname 命令时还需要使用switch 命令。 

(2)Set maxcorrupt for datafile: 使用该命令可以定义RMAN操作失败前锁允许的数据块讹误的最大数据。

(3)Set archivelog destination: 使用该命令可以修改存储归档的重做日志的archive_log_dest_1 目标。

(4)Set 命令和until 子句: 使用set命令和set 命令的until 子句可以定义数据库时间点恢复操作锁使用的具体时间点,SCN 或日志序列号。

(5)Set backup copies命令: 使用该命令可以定义为备份集中的每个备份片应当创建的副本数。

(6)Set command id: 使用该命令可以关联给定的服务器会话和给定的通道。

(7)Set controlfile autoback format for device type: 使用该命令可以修改用于控制文件自动备份操作的默认格式。

例如: 要执行一个为每个备份片创建两个副本的被操作,并且允许数据文件的最大讹误数为10. 脚本如下:

Run{

Set maxcorrupt for datafile 3 to 10;

Stet backup copies=2;

Backup database;

}

七. 联机RMAN 数据库备份

7.1 联机数据库备份

要使用RMAN执行联机备份操作,数据库必须置于Archivelog 模式。 如果不在归档模式,则尝试联机备份时RMAN就会生成一个错误。

连接备份示例:

RMAN> Configure default device type to disk;

RMAN> configure channel 1 device type disk format 'F:/backup/orcl_%U.bak';

RMAN> backup database plus archivelog tag='ORCL';

7.2 表空间备份

可以简单的使用具有tablespace 参数的backup 命令来执行一个表空间的备份操作:

 Backup tablespace dave;

如果同时要备份归档的重做日志,可以执行:

Backup tablespace dave plus archivelog;

我们要确保备份的是当前的控制文件:

Backup tablespace users include current controlfile plus archivelog;

7.3 数据文件备份

RMAN 允许使用带有datafile 参数的backup 命令来备份数据文件,datafile 参数后面是要备份的文件名或数据文件号。 

查看数据文件号:

SQL> select file_id,file_name from dba_data_files;

   FILE_ID FILE_NAME

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

         4 D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF

         3 D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF

         2 D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF

         1 D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF

         5 D:/APP/ADMINISTRATOR/ORADATA/ORCL/DAVE0.DBF

备份:

RMAN>Backup datafile 5;

RMAN>Backup datafile 'D:/APP/ADMINISTRATOR/ORADATA/ORCL/DAVE0.DBF';

RMAN>Backup datafile 'D:/APP/ADMINISTRATOR/ORADATA/ORCL/DAVE0.DBF' plus archivelog;

7.4 归档的重做日志备份

要备份所有的归档重做日志,可以用 backup archivelog all. 还可以备份指定范围内的归档的重做日志,这里有多个选项,包括时间,SCN或者重做日志序列。 

Backup archivelog all;

Backup archivelog from time 'sysdate-1';

Backup archivelog from sequence 400;

一旦备份完成,就可以使用RMAN的 Delete input 选项来删除这些归档重做日志。 

Backup archivelog all delete input;

Backup archivelog from sequence 400 delete input;

也可以指示RMAN 备份归档的重做日志多个副本。 在下面的示例中,我们使用具有not backed up n times 参数的backup命令来确保至少备份3次重做日志,并且不会再次备份已经备份超过3次的归档重做日志。

Backup archivelog not backed up 3 times;

还可以使用backup 与until time 参数来确保归档重做日志在磁盘上保留一定的天数:

Backup archivelog all delete input until time 'sysdate-2';

注: not backed up 参数和 delete input 参数相互排斥,不管归档重做日志的备份次数为多少,delete input 参数都会删除这个归档的重做日志。

7.5 控制文件和服务器参数文件备份

使用backup spfile 命令可以备份服务器参数文件。

Backup current controlfile;

Current controlfile 参数还提供一个for standby子句,这个子句会创建一个备用数据库要用的备份控制文件。可以使用backup 命令的controlfilecopy 参数来创建一个含有外部创建的控制文件备份的备份集,执行alter database backup controlfile to ' filename' 命令或者RMAN 的copy 命令可以创建备用的数据库控制文件。 此外,还可以备份由alter database create standby controlfile 命令创建的备用数据库控制文件,该功能的有点在于可以使用外部控制文件备份文件,在RMAN中注册这些文件,然后创建一个含有控制文件备份的备份集。

Alter database backup controlfile to 'd:/backup/orcl_backup.ctl';

Backup controlfilecopy 'd:/backup/orcl_backup.ctl';

7.6 备份集备份

我们可能现在磁盘上备份数据,然后在磁带上备份备份集。 在Oracle 10g中,RMAN 通过backup 命令支持这种操作。

使用backup backupset 命令可以选择备份所有备份集,也可以选择备份特定的备份集。另外,只能将备份集从磁盘备份到磁盘,或者将备份集从磁盘备份到磁带。在备份备份集中,可以使用delete input 选项在备份操作成功后删除源备份集的文件。 

Backup backupset all;

Backup backupset all format='d:/backup/orcl_%U.bak' tag='ORCL' channel 'ORA_DISK_1';

Backup backupset complete before 'sysdate-2';

Backup backupset complete before 'sysdate-2' delete input;

Backup backupset complete after 'sysdate-2' delete input;

7.7 闪回恢复区备份

RMAN 提供了对backup recovery area 命令将整个FRA备份到磁盘的功能,但并不是FRA中所有的文件都备份,备份文件包括:完整的备份集 和 增量备份集,控制文件自动备份,归档日志 和 数据文件副本。 如果备份的FRA中包含闪回日志,当前的控制文件以及联机重做日志,则不会备份这些文件。 注意,必须将这些文件备份到磁带上。

八. 副本

8.1 映像副本的介绍

RMAN 可以创建数据库数据文件,归档重做日志或者控制文件的精确副本。 Rman 副本是这些文件的副本,区别仅仅在于名称和位置上的变化。我们不需要考虑备份片或其他问题。 映像副本只能在磁盘上生成,且不能生成增量副本。 生成映像副本必须加载或打开数据库。生成副本的历史记录保存在数据库控制文件中。所以我们可以跟踪副本生成的时间和驻留的位置。

类似与常规备份,可以建立整个数据库,表空间或数据文件的映像副本。 RMAN 复制过程提供一些和普通RMAN 备份集相同的保护,例如检查讹误代码块以及逻辑讹误。 此外,映像副本可以与普通的备份集结合起来,帮助完成数据库恢复。

8.2 数据库,表空间和数据文件的映像副本

Backup 命令支持数据库映像副本的创建。 RMAN可以通过backup as copy命令生成映像副本。

RMAN>backup as copy database;

表空间的映像副本创建:

RMAN>backup as copy tablespace Users;

数据文件的映像副本:

Backup as copy datafile 1;

Backup as copy datafile 'D:/APP/ADMINISTRATOR/ORADATA/ORCL/DAVE0.DBF';

8.3 控制文件副本

备份控制文件:

Backup current controlfile;

创建控制文件的副本:

Backup as copy current controlfile;

创建用于备份数据库的控制文件:

Backup as copy standby controlfile;

在创建时还可以指定别名:

Backup as copy standby controlfile format  'D:/backup/controlfilecopy.ctl';

8.4 Archivelog 映像副本

生成归档的重做日志副本是非常有用的。 使用Oracle 的Logminer 产品挖掘(Mine)归档的重做日志副本显然比必须先从备份集中析取这个归档的重做日志更为简单。使用copy 命令的archivelog 参数可以创建归档的重做日志副本。 遗憾的是,使用copy archivelog时必须列出每个归档的重做日志名,而不能指定要复制的归档的重做日志的时间范围。 

Backup as copy archivelog all;

九. 增量备份

通过增量备份,RMAN 允许用户只备份上次增量备份以来被修改过的数据块。 增量备份具有以下有点:

(1)更少的使用磁盘或磁带

(2)降低网络宽带要求

(3)节约备份时间

可以在联机或脱机模式,Archivelog 模式或者noarchivelog 模式中执行增量备份。 一旦选择了增量备份策略,就会在效益方面的问题。 如果显著减少了整个备份操作的时间,在恢复操作方面就会投入更多的时间。 这是因为如果使用增量备份策略,Oracle 就需要使用更多的备份集来恢复数据库,恢复所需要的时间就会显著增加。

9.1 块更改跟踪文件

默认情况下,当执行增量备份时,发生任何更改的所有数据文件都将备份。 这可能使增量备份花费更长的时间,并且会增加增量备份的大小。 10g中RMAN 提供了只备份更改过的数据块的功能。 这就可以加快增量数据库备份的速度并减少其大小。 执行alter database enable block change tracking 命令可以启用块更改跟踪。

如果使用Oracle管理文件(OMF),Oracle 将会创建块更改跟踪文件。 如果没有使用OMF,则必须定义块更改跟踪文件的位置和名称。 如:

Alter database enable block change tracking using file 'F:/backup/block.fil';

如果跟踪文件已经存在,可以使用reuse参数:

Alter database enable block change tracking using file 'F:/backup/block.fil' reuse;

使用alter database block change tracking 命令可以禁用块更改跟踪。 块更改跟踪文件的大小通常预先分片且与数据库大小和重做日志线程的数量有关。 块更改跟踪文件的大小一般是数据库大小的1/30000。 块更改跟踪文件可能会以10MB为增量增长。 块更改跟踪文件的最小尺寸是每个数据文件320k,如果有许多数据文件,则块更改跟踪文件就会较大。 Oracle 会在块更改跟踪文件中存储足够的信息,从而允许最多8天的增量备份。 显而易见,如果增量备份超过8天,则将不使用块跟踪更改跟踪文件,并且无法利用块跟踪文件的有点。

可以通过检查v$block_change_tracking 视图来确定是否启用了块更改跟踪。 Status 指示了是否启用了块更改跟踪,filename 包含块更改跟踪文件的文件名。可以通过alter database rename file 命令来转移块更改跟踪文件。 

SQL> select status,filename from v$block_change_tracking;

STATUS     FILENAME

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

ENABLED    F:/BACKUP/BLOCK.FIL

9.2 基本备份

执行增量备份操作时,首先需要的是增量基本备份(incremental base backup),以后所有的增量备份都基于这个基本备份。 每次执行数据库备份操作时,都可以通过backup 命令的incremental 参数来为备份指定一个增量级别标识符。 基本备份的增量级别为0,并且必须有基本备份才能够执行其他类型的增量备份操作。 如果没有生成基本备份就尝试执行增量备份操作,RMAN会自动执行基本备份操作。 示例:

Backup incremental level=0 database;

9.3 差异备份与增量备份

9.3.1 差异备份

差异备份是RMAN生成的增量备份的默认类型,对于差异备份来说,RMAN会备份自上次同级或者低级差异增量备份以来所发生变化的数据块。 

Backup incremental level=1 database;

9.3.2 累积备份

累积备份可以使备份集备份前面所有级别的备份以及此次要备份的所有发生变化的数据块。 累积备份是一个可选的备份方法,并要求在backup 命令中使用cumulative 关键字。 

Backup incremental level =2 cumulative database;

9.3.3 增量备份选项

Oracle 不仅允许执行数据库的增量备份,还允许执行表空间,数据文件以及数据库文件副本的增量备份操作。 控制文件,归档重做日志以及备份集都不能生成增量备份。 此外,还可以在执行增量备份操作时同时备份归档的重做日志。 

Backup incremental level=0 tablespace users;

Backup incremental level=1 tablespace users;

Backup incremental level=0 datafile 4;

Backup incremental level=1 datafile 4;

Backup incremental level=1 database plus archivelog;

9.3.4 增量备份更新备份

RMAN 提供了增量备份更新备份。 这种备份避免了采用数据文件的完整映像副本进行备份的开销,并且具有与映像副本相同的恢复特性。 从某种意义上来说,这种备份类似与使用映像副本的增量备份。

Run{

Recover copy of database with tag 'Orcl';

Backup incremental level 1 for recover of copy with tag 'Orcl' database;

}

示例中的recover of  copy  database 命令并没有真正的恢复数据库,但它使RMAN将任何增量备份应用于与列出标记(Orcl)关联的数据文件副本。 第一次运行该命令时,它将没有任何效果,因为它没有任何可用的增量备份或数据文件副本。 这并不是很严重的问题,并且RMAN 将只显示一条警告消息。 第二次运行该命令时也没有任何效果,因为没有任何增量备份可用。

执行recover 命令后,就会产生一个增量备份,这个备份第一次运行时,它会创建一个基本备份(如果没有的话)。这实际上增量为1的备份。 第二次执行这个run代码块时,将通过backup 命令执行第一个增量备份。

一旦该命令运行了2次,第三次执行和后面的执行就能够将前面的增量备份应用与数据文件副本。 注意,recover 和backup命令中将标记赋予相同的名称非常重要。

 

 

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