手工备份的缺点
1、产生大量的重做日志
2、需要手工记录大量的信息
每个备份文件的位置、备份时间
每个数据文件的位置
Oracle提供了recovery manager工具,简称RMAN。使得我们的备份工作极大的简化
RMAN备份恢复的优点
1、备份数据文件、归档日志、控制文件、spfile
2、自动维护备份相关的元数据,例如备份文件的名称、完成备份的SCN号
3、以数据块为单位进行备份,只备份使用过的数据块
4、对备份出来的文件进行压缩
5、自动检测数据块是否损坏
6、支持增量备份
RMAN的体系结构
1、RMAN要进行备份的数据库叫做目标数据库
2、RMAN是一个客户端程序,需要建立到目标数据库的客户端连接,并在目标数据库上创建对应的服务器进程以及session,RMAN输入的各个命令,从客户端传递到服务器,由服务器进程负责执行,RMAN只能使用专用服务器连接,不能使用共享服务器连接
3、备份过程中,RMAN读取目标数据库的控制文件,从而获得目标数据库里包含哪些数据文件、归档日志文件、以及各个检查点SCN,指导RMAN完成备份和恢复的具体操作
4、RMAN获得了需要备份的文件列表以后,在将数据备份到备份介质上时,需要建立到这些备份介质的通道(channel)。一旦建立通道。数据就会从该通道备份到指定的备份介质上,每次备份恢复,我们都可以创建多个通道以加快速度。
5、RMAN将通道作为目标数据库上的服务器进程,会为每个通道都创建一个对应的服务器进程,同时,通道的类型就决定了要将数据库备份到哪种介质上,两种通道类型
磁盘通道和磁带通道
磁盘和闪回恢复区使用的都是磁盘通道
磁带使用的磁带通道,需要借助MML(media management library),RMAN可以把备份的数据通过MML传递到磁带上
6、RMAN备份过程中,会产生较多的服务器进程(RMAN客户端以及通道),需要的内存较多,对于初始化参数sessions和processes都要相应的增加
7、RMAN信息库(RMAN repository),RMAN备份过程中产生的元数据,包括备份文件的名称、路径、完成备份的时间、检查点SCN等数据,RMAN信息库可以存放在两个位置
目标数据库的控制文件
恢复目录(recovery catalog)
8、控制文件里面存放的记录分为两类
可删除的记录(归档日志文件的历史记录以及RMAN备份的元数据)
不可删除记录(数据文件、联机日志文件列表等)
如果需要在控制文件中存放新的记录,则可以删除那些可删除部分,从而提供可用空间,注意:如果RMAN备份的元数据被删除,RMAN的备份数据就失去意义,因此RMAN备份的元数据很重要
9、可以通过设置初始化参数controlfile_record_keep_time来决定控制文件中可删除部分,该参数默认是7天,表示控制文件始终保持最近7天的可删除记录,7天前的备份信息、归档日志文件历史记录被删除,如果设置为0,表示不删除历史记录,那么控制文件的增长将会失控。因此RMAN的备份周期不能超过7天
10、RMAN提供了恢复目录用来存放RMAN信息库,RMAN恢复目录由几个表和存储过程组成,这些对象存放在一个schema下面,因为表用来存放RMAN备份的元数据,因此可以永久的保留下去,而不需要删除历史记录
11、RMAN恢复目录是可选的,不是必须的,元数据通过目标数据库的控制文件传递到恢复目录,RMAN的元数据始终都存放一份在目标数据库的控制文件中,不会因为恢复目录的存在而删除,使用RMAN完成备份以后,会将控制文件的RMAN元数据同步到恢复目录,默认情况下,控制文件中的信息保留7天,恢复目录永久保留。RMAN还可以同时为多个目标数据库服务,在同一个恢复目录里面,可以保留多个目标数据库的RMAN元数据
12、如果使用恢复目录,则在使用RMAN时,除了建立到目标数据库的连接以外,还必须建立到恢复目录所在数据库的连接,在恢复目录数据库里面创建对应的服务器进程和session
13、RMAN工具本身由两部分组成
RMAN可执行程序:这是一个命令接口,提供了交互的界面,能够解释我们的RMAN命令,返回结果。在工作中,完成的实质性工作很少
脚本文件recover.bsp:备份恢复的实质性工作是由目标数据库的程序包完成的,对目标数据库的相应程序包的调用则是由文件recover.bsp实现的
bsp文件
里面全部是各种PL/SQL脚本块,事实上,RMAN界面输入的各种命令,都会被转换成对bsp文件中各个PL/SQL块的调用,并将相关的PL/SQL块传递到目标数据库上去执行,从而完成数据库的备份恢复操作,bsp才是RMAN工具的核心。bsp中包含的PL/SQL块,主要调用了目标数据库中以下两个程序包
dbms_rcvman: 用来读取目标数据库的控制文件信息,并将这些信息传给RMAN,从而RMAN可以获取要备份的文件列表,以及其他一些信息
dbms_backup_restore: 完成具体的备份恢复工作,并在控制文件中写入备份的元数据
两个数据包已经硬编码到数据库软件中,因此数据库在关闭的情况下也可以使用RMAN
14、RMAN备份恢复过程中,可能会需要关闭和启动数据库,因此在目标数据库上,必须使用具有sysdba权限的用户身份进行连接,如果没有使用操作系统认证,那么要注意密码文件不要丢失,密码文件应该定期的备份
15、RMAN备份的最小单位是数据块,不是数据文件,RMAN备份时,总是一个数据块一个数据块的读取和写入,RMAN可以与DBWr进程协调一致,如果在备份过程中,发现是一个脏的数据块,可以等到DBWr进程将内存的内容刷新到数据文件以后,才备份该脏数据块,因此不会出现分离数据块的情况,同时避免了使用begin backup,也就不会产生过多的重做日志,和手工的备份是两种机制
16、RMAN只会对使用过的数据块进行备份,可以在数据库关闭时备份,RMAN备份时,从物理层面来判断数据块是否被使用,也就是说,只要某个数据块的头部被格式化过,RMAN就认为该数据块被使用过,就会备份该数据块,例如我们删除了一个大表,但是RMAN的备份不会减小多少,因为删除表的时候,只是将数据字典中的信息进行了删除,表实际所占用的数据块并没有被删除,数据块物理上还有数据,因此RMAN还会进行备份。
快速闪回区(flash recovery area)
Oracle 10g数据库中,为RMAN备份文件设置了默认的路径,也就是快速闪回区。
该区域是文件系统上的一个目录,也可以是ASM的某个磁盘组
RMAN的备份可以不存放在这个目录区中,但是闪回恢复区有很多的好处
1、简化对RMAN备份文件的管理,这个区域的文件都是OMF文件,文件的名称和大小都是Oracle自动管理
2、该区域的空间管理也是自动进行的
当RMAN需要在该区域创建新的文件,但是空间不足,Oracle会自动根据配置的冗余策略,删除不再需要的备份文件
如果该区域出现空间压力,会在告警日志中(alter<Sid>.ora)记录该信息,我们可以根据告警,适当的增加该区域的大小、修改RMAN备份的冗余策略
两个参数,设置目录和大小,必须先设置大小,再设置目录
只是改变了目录,已经有的文件并没有移动过来。
闪回恢复区可以存放RMAN备份文件、控制文件、联机重做日志文件、以及闪回数据库日志文件等
Oracle设置了闪回恢复区,反映了Oracle 的一个趋势,数据库自动化管理所有的工作。设置了闪回恢复区以后,我们只需要设置好冗余策略、控制大小,目录位置。剩余的工作Oracle都会自动的搞定。
Used表示已占用的空间大小的百分比(相对2G)
Reclaimable表示通过删除必须要的备份文件所能回收空间的百分比
Number表示文件的总数
通过database control图形界面可以更加直观的查看利用情况。
使用configure命令配置RMAN
1、RMAN用户需要sysdba权限,我们最好不要使用sys用户,因此给RMAN建立一个专用账号
2、连接目标数据库的几种方式
认证部分,本例使用的是操作系统认证,以sys的权限进行了登陆
target,表示连接的是目标数据库,而且本例指的是本机的数据库实例,最终连接到了本机数据库实例VFAST中
如果是在另外一台机器上使用RMAN客户端,那么可以使用下面的连接方式。
登录到本地rman
登陆rman到目标数据库
RMAN的选项中,两个选项经常使用
1、log
2、cmdfile
RMAN所有的输出都不会显示在屏幕上,而是显示在日志文件中
参数append表示在原来的日志基础上追加日志信息,不是覆盖。
如果RMAN是晚上自动运行,那么就需要添加log选项,作为一个日志记录,很重要的参数。
另外一个参数是cmdfile表示
使用RMAN连接到数据库,然后立即执行cmdfile文件里的命令,该命令可以是任何合法的RMAN命令。
下面的两个参数是经常使用的参数。
接下来看看命令的方式
RMAN命令的分类
1、独立的命令
在RMAN提示符下面,输入一条命令,立即执行
2、任务形式的命令
以RMAN{}形式执行,所有要执行的命令都放在两个{}之间,执行时,RUN模块里面的所有命令必须都成功,整个任务才算成功,其中任何一条命令失败,则整个任务失败并回滚,不会执行其中的任何一条命令。
从9i开始,可以将一些常用的配置选项设置为默认值,每次备份时,就不需要再进行这些配置,直接进行备份
configure命令进行默认配置,配置的选项包括
1、自动备份控制文件
2、自动启动某个类型的通道(磁盘或者磁带)
3、备份的冗余策略
4、默认的备份类型:备份集(backup set)or镜像副本(image copy)
5、备份片的大小
Configure的配置保存在控制文件中,原有的默认配置硬编码到了RMAN只可执行命令中,因此数据库在没有mount的时候,show命令都可以查看这些默认值,但是对我们设置的值,在这里看不见。
我们要配置某个选项的时候,不需要记住具体的命令,因为使用show all以后,命令都出来了。
通过dbconsole也可以查看具体的选项。
自动备份控制文件
1、每次使用RMAN进行备份,都会自动备份控制文件和spfile
2、修改了数据库结构,立刻自动备份控制文件
可以配置控制文件备份所在的目录和文件名字
默认使用的是闪回区,使用闪回区的时候,文件名字使用的OMF,即使设置了文件名字,也不起作用,因此需要改变目录。
更改控制文件存放路径及格式
自动启动某个类型的通道
这是RMAN配置中最重要的地方,也是必须配置的地方
通道表示将数据复制到备份介质的物理通道,通道类型则说明将数据复制到磁带还是磁盘,可以定义默认的通道类型
默认我们将数据备份到磁盘上。我们也可以备份到磁带上,就将disk替换为sbt,就表示备份到磁带上。
指定同时自动创建多少个通道,上面指定了三个通道,加快了备份速度。
上面的配置中说明,默认使用磁盘作为备份介质,同时启用三个磁盘通道进行备份。
这次备份作业,手工的创建了一个通道,覆盖了前面指定的默认设置:磁盘+3个通道。
如果是RAC,那么可以指定在哪个实例上启动通道。单实例不需要指定。
参数format,说明该通道生成的备份文件的名称格式
通道生成的备份文件的名称和格式。
%c:备份片的副本数
%d:数据库名称
%D:位于该月的第几天
%M:位于该年的第几个月
%n:数据库名称,向右填补到最大8个字符
%u:一个8个字符的名称,代表备份集和创建时间
%p:该备份集的备份片号,从1开始到创建的文件数
%U:一个唯一的名字%u_%p_%c
%s:备份集的编号
%t:备份集的时间戳
%T:年月日格式(YYYY-MM-DD)
参数maxopenfiles:表示当发出backup命令的时候,一个通道能够处理的文件的最大个数,默认为8
参数maxpiecesize:创建的备份片(备份出来的物理文件)的大小
Parms ‘ENV=…’:表示将数据备份到磁带上时,到磁带的通道的一些参数配置,对于不同的厂商,其Parms的值也是不同的
上面都是一些和通道有关的参数
1、默认的设备类型
2、默认启动的通道数量
3、备份时手工分配通道
4、RAC环境中指定在那个实例上启动通道(connect)
5、format指定了生成的文件名和备份路径
6、一个通道最大能够处理的文件个数
7、备份片的大小
8、如果通道是磁带,那么需要配置一些和厂商有关的参数
分配了三个通道,因为只有一个数据文件,只在通道1上创建了一个备份集,这个备份集包括一个备份片。
控制文件和spfile单独备份到了一个位置,生成了文件
删除了一些我们不需要的配置,每个备份片的大小是20M。
备份集(backup set)
默认的备份类型是备份集,生成备份集的时候,RMAN会将不同的数据文件里使用过的数据取出后,放在同一个物理文件里,也可以放在不同的物理文件里。产生的物理文件叫做备份片(backup piece),备份片的逻辑组合叫做备份集,备份集只是一个名字而已,将物理文件逻辑的组合在一起
一般来说,一个通道生成一个备份集,启动了三个通道,那么就生成三个备份集。如果启动了备份文件的自动备份,那么控制文件所在的备份文件会单独的生成一个备份集,不会与数据文件所在的备份集合并在一起,另外,如果指定了每个备份集包含的数据文件的个数(filesperset),那么即便只有一个通道,也有可能生成多个备份集。
控制文件所在的备份集以操作系统块作为最小单位
数据文件所在的备份集以数据块作为最小单位,因此不能放在一个备份集中
如果指定了备份片的大小,比如2G,要备份的数据文件占5G,那么在备份集中会生成3个物理文件(3个备份片),其中两个为2G,一个为1G
备份集的数量通常取决于下面的几个参数
是否启用了控制文件的自动备份,启用则备份集多1个
启用了几个通道,一个通道一个备份集
每个备份集包含的数据文件的个数,可能出现一个通道多个备份集的情况
备份片的数量则取决于备份集的数量和最大备份片的数量
镜像副本
这与手工通过操作系统的复制命令备份数据文件类似。一个数据文件生成一个镜像副本文件,整个复制过程是RMAN进行的,RMAN一个数据块一个数据块的复制,RMAN会检测每一个数据块是否出现损坏,不需要将表空间设置成为begin backup,镜像副本中包含使用过的数据块,也包含从未使用过的数据块。生成镜像副本的好处在于恢复速度相对备份集来说,更快一些。
备份的冗余策略
recovery window
哪些文件必须备份?默认值是7.
保留下来的备份,必须能够将数据库恢复到指定时间之内的任意一个时刻,指定这个参数为7,则表示保留的备份文件能够将数据库恢复到最近7天中的任何一个时刻。为了能够将数据库恢复到7天之内的任何一个时刻,那么备份文件必须满足保留7天。这样当我们需要恢复到7天之内的任何一个时刻的时候,找到满足条件的数据文件,配合日志进行恢复。如果我们只保留了最近4天的备份,那么如果我要恢复到6天前的一个时刻,那么就不能够实现。
redundancy
表示要保留的,能够将数据库恢复到最新状态的完整的备份文件的个数。根据策略,不再需要的备份文件则被认为是obsolete。
数据库会保存两套完整的备份。
两个冗余策略配置只能一个生效。
再换回redundancy
使用RMAN完成备份
使用RMAN进行备份以前,首先要做的就是看一下配置,这一步很重要
默认使用disk——disk的并行度是3(3个通道),而且是备份集的形式——通道的format定义,备份片的大小
使用RMAN进行备份时,我们使用backup命令,该命令可以独立的放在RMAN提示符里面,也可以放在RUN{}里面,最简单的命令如下
RMAN>backup database;
1、分配通道,输入数据文件到指定的通道
2、在通道上创建备份集和段(备份片)
一个备份集上可能有多个段(备份片),这取决于备份片的大小
一个通道上也可能有多个备份集,取决于备份片的大小。
因为我们启动了控制文件的自动备份,因此在备份的最后,单独的生成一个备份集。
通过上面的操作提示,我们得到下面的结果。
操作日志具体见backup.log
1、分配通道、数据文件输入通道,创建备份集、备份片
2、控制文件创建备份集、备份片
如果数据库是非归档模式,我们需要启动数据库到mount状态,然后执行backup 命令,因为RMAN需要读取目标数据库的控制文件。
如果数据库是归档模式,数据库在打开时可以备份。
备份片的名字和位置取决于format。
分配了两个通道,按照指定将1、3分配给了c1,将2、4分配给了c2,然后备份了控制文件和spfile,最后执行了一条SQL语句
将所有的备份片放在同一个目录下面。Format参数可以在指定通道的时候指定,也可以在backup命令中指定。
如果不指定datafile的分配,那么RMAN会根据数据文件的大小,大致进行分配,尽量保持两个通道分配的平均。
手工分配通道以后,会将默认的通道覆盖掉,默认通道的分配取决于参数parallelism
备份集支持压缩,压缩比例大约是5:1.
设置标记tag
为每一个备份集或者镜像副本文件所取的名称。在恢复和list的时候,我们可以非常清楚的知道某个备份的意义。
Tag标记具体的加在了段上。
默认情况下,RMAN在备份时总是会检查数据块是否发生物理损坏,如果是为了加快备份速度而不希望RMAN进行数据块的物理检查时,可以关闭这个选项。
默认情况下,RMAN不会检查数据块是否发生逻辑损坏,backup时可以启用逻辑损坏检查。
RMAN进行备份时,只要发现新的坏块,就立即停止备份。如果发现的坏块是上次已经发现的,则继续备份。我们可以设置maxcorrupt参数来通知RMAN,只有当发现的坏块个数超过指定的数量时,才停止备份。
这是一个迫不得已的参数。尽量不要使用。
数据文件3、5出现的新的坏块超过10的时候,停止备份。
设置备份集的大小(前面已经讲过设置备份片的大小)
如果输入的文件的总量超过备份集的大小,那么在这个通道上创建第二个备份集。如果配置的备份集连一个数据文件都容纳不了,则会报错。
我们可以不进行实际的数据库备份,只是检查数据文件是否损坏。
离线、丢失的数据文件备份时,会报错,我们需要跳过这些数据文件,否则备份失败。
三种类型都跳过,包括跳过只读表空间。
在备份时,只对那些自上次备份以来新添加的数据文件进行备份。
在备份时,只对那些在指定的时间内没有备份过的数据文件。
备份归档日志和控制文件
1、RMAN备份归档日志时,首先进行一次日志切换,然后对归档进行备份
2、RMAN备份过程中如果发现当前归档日志损坏,会自动的切换到另外一个归档路径下面(前提是存在多个归档路径)查找该文件的副本
3、备份时需要指定要备份哪些归档日志
备份一天以来所有的归档日志。分配的通道和文件名字都遵守配置文件中指定的参数。这个和数据文件备份的区别就是输入的文件是日志。
从日志序列1开始备份。每一个日志文件都有一个日志序列号。
备份所有的归档日志。
备份归档日志的方式有下面的三种
1、根据时间
2、根据日志序列号
3、备份所有的
备份数据库时,同时备份归档日志文件
备份数据文件时,同时备份归档日志文件。
备份归档日志后,将成功备份的归档日志进行删除。
在进行备份之前,如果手工删除了某些归档日志文件,则备份时,由于RMAN会根据目标数据库的控制文件里所记录的归档日志文件列表,去找所有的归档日志文件,因此会发生找不到需要备份的归档日志文件的现象,RMAN因此会报错,备份失败。
只备份那些能够访问的归档日志文件,跳过那些不能访问的归档日志文件。
这是一个很不好的现象,如果发现归档日志丢失,马上进行数据库的全备份。
数据文件和归档日志可以同时备份,但是不会放在一个备份集里面,至少创建两个备份集。这点和控制文件的备份很类似。
备份当前的控制文件。
如果控制文件的自动备份设置为on,那么任何RMAN备份都会引发控制文件和spfile的自动备份,这是一个不错的参数。
增量备份
所谓增量备份,就是只对那些自从上一次备份以来,发生变化的数据块进行备份。
既可以在归档模式下面进行增量备份,也可以在非归档模式下面进行增量备份。
对于非归档模式的增量备份,每次备份时,都必须正常关闭数据库,然后启动到mount状态。
1、首先必须要有一个基本备份,包含所有使用过的数据块的备份
2、基本备份就是级别0(level=0)的备份,以后所有的增量备份都是基于这个基本备份完成的
3、如果RMAN进行增量备份时,发现没有可以参照的基本备份,RMAN会自动的进行0级备份,忽略我们指定的增量级别备份
4、增量备份级别包括1、2、3、4、5一共五个级别,0作为基本级别
增量备份分为差异增量备份、累计增量备份
差异增量备份:表示每次备份时,只对那些小于等于当前级别的备份以来变化过的数据块进行备份。
周日零点 0级备份
周一零点 2级备份
周二零点 2级备份
周三零点 1级备份
周四零点 2级备份
周五零点 2级备份
周六零点 2级备份
1、周日备份所有的数据块
2、周一备份<=2,最近的就是周日,那就是备份周日以来发生变化的数据块
3、周二备份<=2,最近的就是周一,那就是备份周一以来发生变化的数据块
4、周三备份<=1,最近的就是周日,那就是备份周日以来发生变化的数据块
5、周四备份<=2,最近的就是周三,那就是备份周三以来发生变化的数据块
6、周五只是备份当天发生变化的数据
7、周六只是备份当天发生变化的数据
差异备份
启动一次增量差异备份
累积备份
累计备份,只对小于当前级别最近一次备份以来发生变化的数据块进行备份。
无论是累计还是差异,都进行如下两步
1、向前寻找一个增量备份基点
2、备份这个基点以来发生变化的数据块
差异增量:向前寻找基点的方法是<=本备份级别
累计增量:先前寻找基点的方法是<本备份级别
寻找到这个基点以后,自这个基点以来发生变化的所有的数据块都进行备份。
Oracle 10g一个新的特性:能够将增量备份应用到某个镜像副本上
1、周日生成了一个镜像副本
2、周一进行增量备份,然后将产生的增量备份应用到周日所做的镜像副本上,这时周日的镜像副本中就包含了周一的数据,从而体现了最新的状态
3、周二的增量备份再应用到镜像副本上,以此类推
对镜像副本应用增量备份的最大的好处在于加快恢复速度
第一条语句表示要生成级别为1的、tag值为incr_upd_db,针对整个数据库的,并且应用于增量备份的镜像副本。
1、第一天执行该程序,执行第一句话的时候,由于我们没有0级备份,因此会生成整个数据库的镜像副本(该副本不是普通的副本,而是可以在其上应用增量备份)
执行第二条语句的时候,,因为没有增量备份,因此不会执行,但是也不会报错。
2、第二天执行该程序,由于已经有了第一天的0级备份,所以会生成一个1级别的增量备份,执行第二条语句的时候,会将第一条语句生成的增量备份应用到第一天所生成的镜像副本上。以后的每一天都会生成一个增量备份,并将该生成的增量备份应用到镜像副本上,如果过需要恢复,先恢复镜像副本,然后应用最近一次增量备份以来,所生成的所有归档日志,即可进行数据库恢复。
每天重复执行上面的run模块,就能够达到我们要的效果
1、每天将增量备份添加到镜像副本上
2、恢复时使用最近的镜像副本+少量的归档日志即可,恢复速度会很快
查看备份集
显示spfile都在哪些备份集里面
列出过期的备份(expired),所谓过期指的是备份的文件已经丢失(例如我们手工将文件删除,但是元数据还在控制文件里面)
1、检查并标识出当前有哪些已经过期的备份集
2、列出已经过期的备份集
3、删除已经过期的备份集
删除过期的备份集
report命令
List命令只是简单的将RMAN的元数据检索并显示出来,RMAN同时还提供了report命令,该命令具有一定的分析功能。
显示数据库的结构
查看结果
根据冗余策略,显示可以丢弃的备份文件列表,物理的将这些可以丢弃的备份文件进行删除。
report经常用来显示哪些文件需要进行备份
显示那些进行恢复时,使用增量备份文件超过3个的数据文件的列表。如果一个数据文件在继续恢复时候,需要的增量备份文件过多,那么这个恢复速度将会很慢。因此上面的显示还是有意义的。
显示最近三天以来没有备份过的数据文件
显示没有三个完整备份的数据文件的列表
显示如果要恢复到3天前的状态,哪些数据文件还需要备份。
上面提到的need指的是将数据库恢复到最新状态。