在手工备份恢复的操作中,介绍了如何使用操作系统命令拷贝整个文件,拷贝的文件包括数据文件、控制文件和归档日志文件,然年后使用这些文件还原并恢复PRACTICE数据库。在操作过程中,用户必须自己管理备份和恢复操作,必须创建需要拷贝和还原的数据库文件清单。在本练习中,我们介绍RMAN如何使用服务器相关组件题用户处理备份的细节,当使用RMAN进行数据库备份时,RMAN知道需要对哪些文件进行操作。
用户管理与服务器管理的备份与恢复之间的根本不同之处就是:对于用于管理操作DBA必须知道需要备份什么以及需要还原与恢复什么;而对于服务器管理的操作,RMAN将通过一个简单的接口决定需要备份什么以及需要还原与恢复什么,大部分管理任务被省略或简单化了。例如:在前面描述的打开数据库备份,如果是用户管理备份,则在拷贝数据库数据文件之前,必须为每一个表空间创建清单并将表空间置于备份模式,并产生额外的重做;而RMAN备份打开数据库时,并不自动产生额外的重做。
RMAN处理的数据文件备份与用户管理有什么不同?RMAN智能化程度很高,对要备份的数据文件中任何更改的数据块的SCN保持跟踪记录,通过数据库的活动可以对备份文件的更改继续进行。在恢复阶段,RMAN将自动应用需要的重做并使文件处于一致的状态。在备份期间,有可能出现RMAN拷贝的数据块没有被DBW(数据库写入器)进程完全写入到磁盘的现象,从而导致数据块头部与尾部不一致,这种现象称之为“断裂”或“破碎”块,当检测到这样的数据库时,RMAN将重新读取该块,直到完成完整的拷贝。因此,RMAN可以以最小的性能降低为代价对打开的数据库进行备份。
恢复管理器为数据库的备份提供了三种不同的方法:备份、映像拷贝以及代理拷贝。尽管三种方法都能提供恢复或数据库失效时所需要的数据库备份结果,但每种方法都有其优缺点:
一、备份
RMAN备份在选择的备份介质上以自己的格式创建一个或多个物理文件,这些物理文件称为“备份片”,备份可以由数据库、选择的表空间、数据文件、控制文件、归档重做日志或多种混合体组成。
RMAN创建的备份文件(备份片)不能被其他任何工具读取,因此只能用RMAN还原,为了解这些备份是如何创建,需要理解如下基本术语:
当执行backup命令时,请考虑如下问题:
1) 备份时数据库处于什么状态?(数据库状态)
2) RMAN备份需要保存到什么地方?(设置目的地)
3) 需要备份的是数据库的那些部分?(数据库文件)
4) 需要拷贝数据库文件的哪些数据块?(增量级别)
下面将讨论备份时需要考虑的这些问题:
1、确定备份集数据库状态:
首先,RMAN可以在两种不同的数据库状态之间进行备份,这两种状态分别是数据库关闭和打开时进行备份。
2、确定备份集目的地:
接着,当执行RMAN备份命令时,RMAN将生成一个或多个文件(备份片),这些文件除了备份的数据块之外还存储了RMAN的控制信息,为RMAN创建的备份片赋予有意义的名称可以避免无人知道磁盘或磁带上的文件来历或内容。下面是一些可用的格式变量:
下表列出一些使用这些格式变量的示例,如果备份到磁盘必须指定路径名和文件名,如果没有制定路径名,备份通常情况存储到$ORACLE_HOME/dbs
指定的格式 |
示例结果 |
dbinc0_%d_%s_%p_%t |
dbinc0_PROD_21_1_447001901 |
tbsUSERS_%U |
tbsUSERS_08ade506_1_1 |
al_%n_%t_%s_%p |
al_PRODXXXX_44157468_41_3 |
3、确定备份集数据库文件:
下一步,定义属于RMAN备份范围的属于,在执行一个单独的backup命令时,需要制定包含在备份集中的数据文件,这些文件包括数据文件、控制文件和归档日志文件。可以应用如下备份选项:
4、确定备份集的级别
数据文件由数据块组成,每个块都在更新时赋予一个系统更改号,当进行备份时,每个块从数据文件读出,只有符合备份级别条件的数据块才拷贝到备份集中。因为归档日志文件和控制文件中所有的数据块都将复制,所以备份级别只属于数据文件备份,RMAN不从数据库文件中拷贝空的数据块到备份集中,只有进行映像拷贝时才拷贝空的数据块。
二、 压缩备份
RMAN进行备份数据文件时,有两种模式的操作:增量式和完全式。
1、增量式备份(Ineremental Backup):
采用增量式备份策略可以只备份上次增量备份之后更改的数据块,这样可以大大减少备份的数据量,并因此可以减少进行备份和还原所需要的时间和控件。
增量备份有备份级别的概念,级别是0到4之间的整数,当进行增量备份时,数据检查点SCN存储在目标控制文件中,随后的增量备份决定了需要拷贝那些SCN之后的数据块。备份级别0是全集备份级别,在级别为0的备份中,要备份选中数据文件所有使用过的数据块。
增量备份有两种类型:
下面给出了不同增量备份的一个基线,一个星期的每一天为数据文件生成一个备份集,实施这些备份的描述如下:
如果选择了差异增量备份策略,那么在星期六级别为2的增量备份后,如果数据文件在星期六丢失,则RMAN将采取以来备份进行还原:
累积增量备份类似于差异备份,但略有不同。这个图显示了累积增量备份的基线,一个星期的每一天为一个数据文件生成一个备份集:
如果选择了累积增量备份策略,那么在星期六级别为2的增量备份后,如果数据文件在星期六中午丢失,则RMAN将采取以来备份进行还原:
选择应用差异还是累积备份策略,需要根据备份速度/大小与还原和恢复的速度比较确定:
因为备份集中包含了使用过的和更改过的数据块,所有备份集将比映像拷贝要小,使用备份集的主要原因就是因为备份文件比影响拷贝和用户管理操作节省空间,当使用RMAN备份命令保护数据库时,应参考如下情况和建议:
2、完全备份(Full Backup):
完全备份中,每个数据文件中所有使用过的数据块都拷贝到数据集中,RMAN可以还原完全备份并应用归档中作日志将数据库及时回退到以前的状态。完全备份拷贝的数据块与增量级别为0的备份拷贝是一样的,但却不是增量备份,增量备份选择拷贝的数据块是基于以前的增量备份。例如,通过星期天增量级别为0的备份对一个数据文件进行备份,在星期一进行完全备份,在星期二进行增量级别为1的备份,则在星期二备份的数据块并没有考虑在星期一的备份,而是在最近一次增量备份(星期天备份)以来所有更改过的数据块。
三、 映像拷贝
拷贝命令将生成一个完整数据库文件的映像拷贝这个数据库文件可以是数据文件、控制文件或者是归档日志文件,RMAN生成的文件拷贝需需要应用任何特殊格式化就能与原始文件区别开来。因此当数据库打开或关闭时,该文件可以当做操作系统拷贝的文件应用,唯一不同的是,该拷贝自动在目标数据库控制文件和可选的回复目录中注册了。
级别为0的增量备份或完全备份生成一个数据文件所有使用过的数据块的备份,映像拷贝也完成同样的工作,同时也包含了所有空的数据块。在应用任何其他增量备份或重做之前,RMAN可以应用映像拷贝、完全备份或级别为0的备份作为还原的基准。影响拷贝不能用任何其他增量级别(1-4)生成。RMAN只能在磁盘生成映像拷贝,不能使用SBT_TAPE通道生成影响拷贝。
影响拷贝与差异和累积增量备份相比有一个主要的优点:可以在还原过程中快速应用影响拷贝。例如,如果丢失了数据文件,让RMAN切换到映像拷贝、应用重做,则该数据文件可以访问。但应用映像拷贝最大的缺点是,需要占用与原始空间一样的的磁盘空间。
四、代理拷贝
Oracle增加了一个称为代理拷贝的功能,以增强发布的介质管理层(MML)API,代理拷贝允许MML控制如何进行数据文件的读取和备份,RMAN向MML层传递需要备份的数据文件列表,MML决定如何进行最佳的备份。使用代理拷贝的优点可以利用介质管理层的高级特性,例如:从磁盘到磁带的数据直接传递。使用代理拷贝的一个缺点是当数据库打开时,每个要备份的数据文件都要在内部设置为准备份模式,类似于手工将表空间设置为热备份模式。
五、 备份类型的比较
了解了RMAN进行的备份、映像拷贝和代理拷贝之后,需要了解三种类型的优缺点,下表提供各类型的优缺点:
备份类型 |
优 点 |
缺 点 |
备份 |
只包含使用过或更改过的数据块,备份文件比较小。如果需要节约备份空间则生成备份集,备份集动态为备份决定数据库文件。 |
因为从备份集还原需要从一个或多个备份片中重新构造数据文件,所以恢复的时间较长 |
映像拷贝 |
可以快速还原文件拷贝,如果回复时间很关键,可以采用映像拷贝 |
文件拷贝需要与数据库文件同样的大小,因此需要比备份集更多的空间;每个映像拷贝必须在备份命令中明确指定名称,生成动态脚本比较困难,而且映像拷贝只能写到磁盘上 |
代理拷贝 |
可以利用MML的高级特性,较少考虑备份片和备份集的大小 |
需要第三方供应商支持,增加支持复杂该特性文档不全面 |
对于本章的练习需要以SYSDBA权限的用户连接到目标数据库,还需要链接到目录数据库上,采用如下的连接步骤:
练习20:创建恢复管理器的映像拷贝
该练习与打开、关闭数据库的手工备份恢复练习非常相似,这里将用RMAN创建PRACTICE数据库中所有数据文件和控制文件的拷贝。
步骤一:创建RMAN Copy脚本
在数据文件拷贝命令,必须要明确拷贝反而每个文件,并为拷贝的文件指定名称。一个生成数据库文件列表的快捷方法就是运行REPORT SCHEMA命令,应用该列表生成RMAN的拷贝脚本,从输出结果拷贝文件名并黏贴到b_copy.rcv中。该脚本将拷贝数据文件和控制文件(尽管RMAN的脚本可以是任何名称和文件扩展名,但最好将这些文件的扩展名设置为rcv)。
该命令中首先分配通道,然后执行拷贝命令,RMAN将数据文件映像拷贝到提供的文件名,并且当前的控制文件也被拷贝,当执行考背后释放分配的通道。
步骤二:运行RMAN Copy脚本
连接到目标和目标数据库,运行刚才生成的脚本,然后用@符号来运行RMAN命令文件:
这些消息说明RMAN成功地编译并执行分配命令,通道的名称为d1,目标数据库PRACTICE的会话ID为142,而生成的通道类型为DISK。
可以看到,拷贝命令为数据文件1生成一个映像拷贝文件system01.dbf.bak。
在该脚本的结尾,会得到恢复目录的部分再同步:
在再同步期间,RMAN的拷贝记录将与恢复目录同步,在运行模块的最后,d1通道将从数据库自动释放。
步骤三:验证RMAN Copy脚本
可以通过检查RMAN脚本的输出结果来验证映像拷贝,当然也可以通过其他方法来验证是否成功创建了数据文件和控制文件的影响拷贝。
首先检查D:\oracle\CODE\chap12目录,这个目录将为所有文件生成一个拷贝,接着在RMAN命令提示符下运行list copy命令:
这个输出显示了RMAN从以前脚本卡被的每个数据文件,还有以前进行的其他拷贝,每个数据文件都有自己的备份号,应用备份编号可以维护每个映像文件拷贝,标志为S的帘幕提供了备份片的状态(AVAILABLE、UNAVAILABLE或EXPIRED)。如果这些映像拷贝在数据库打开时被还原则必须应用重做,以保证数据库的其他部分与这些文件一致。LIST COPY命令并没有显示控制文件,因为默认显示的文件类型是数据文件,为显示控制文件的拷贝,需要在LIST COPY命令中增加OF CONTROLFILE: