RMAN (RECOVERY MANAGER)管理的备份与恢复
---- 认识数据库物理备份和逻辑备份
参考 http://www.eygle.com/digest/2008/05/rman_quickly_manual.html
http://space.itpub.net/35489/viewspace-539639
ORACLE中数据备份分为物理备份和逻辑备份两种。物理备份就是转储ORACLE
物理文件(如数据文件、控制文件、归档日志文件等,以Block为单位的动作),
一旦数据库发生故障,可以利用这些文件进行还原;逻辑备份就是对数据库对
象(如用户、表、存储过程等)利用类似EXPORT等工具进行导出工作(以SQL语句
等脚本为单位的动作),可以利用IMPORT等工具把逻辑备份文件导入到数据库。
RMAN备份是一种物理备份,不是对象级的逻辑备份,可以用RMAN来备份数据文件、
控制文件、参数文件、归档日志文件。在数据库出现问题的时候可以通过RMAN
物理备份恢复到数据库的失效点。
逻辑备份是通过逻辑手段记录要备份的数据库对象的信息,是一种对象级备份
的方案,因此逻辑备份的备份集的可移植性比较强,可以把数据库的逻辑备份
恢复到不同版本不同平台的数据库上,也正是因为逻辑备份是对象级的备份,
因此备份和恢复的效率比较低,对于大型的系统,采用逻辑备份,其恢复时间之
长是大多数大型业务系统所不能忍受的。 相对而言,物理备份不具备移植性,
备份环境和恢复环境必须是完全相同的,由于物理备份是对数据库的文件(Block)
进行备份,其备份和恢复速度相对比较快,在大型业务系统中较多地使用物理备份。
总之,逻辑备份效率低可以跨平台,物理备份效率高不能跨平台。
注意: RMAN backup可以实现仅备份使用过的block从而提高备份效率(当然
10.2.0.2及以后版本RMAN仅仅备份有数据的块)。 热备份是以OS Block为单位做备份,RMAN备份是以Oracle Block为单位做备份 。
RMAN优缺点 ----
1). 能备份数据文件,归档日志文件,控制文件及spfile;
2). 能自动维护备份相关的元数据,包含备份的文件名称,完成备份时的SCN号等;
3). 只备份使用过的数据块(10.2.0.2及以后只备份有数据的块),节省空间占用;
4). 可以把备份的输出打包成备份集,也可以按固定大小分割备份集;
5). 能对备份文件进行压缩,节省空间;
6). 备份过程中,RMAN能检测是否出现损坏的数据块(默认enable检测物理坏块,
disable检测逻辑坏块,需要手工指定才可以开启检测逻辑坏块);
7). 可以在块水平上实现增量,节省了完成备份需要的时间 等;
8). RMAN可以在目标数据库mount 的情况下对数据库进行备份 , 在数据库close的情况下进行恢复 ;
9). 并行的备份与恢复,提升速度;
9). 自动完成,不需要人为干预 ;
10).在线备份时,表空间不用置于备份模式 ;
缺点: rman的缺点是使用起来技术性比较强
备注: RMAN在目标数据库mounted的情况下也能进行备份,主要是由于对recover.bsq文
件中两个包dbms_rcvman及dbms_backup_restore执行, 这两个包都是硬编码在Oracle
软件中,数据库没有启动也能调用执行。
13.1.1 RMAN的备份体系
目标库(target database) -- 需要备份的数据库 。
备注: RMAN只能使用专用连接方式建立到目标数据库的连接,不能使用共享连接的方式。
备份原理及备份过程 ---
RMAN备份基本过程 ---
在备份过程中,RMAN读取目标数据库上的控制文件,从而获得目标数据库里包含哪些数据
文件、归档日志文件分布在哪里以及各个检查点SCN号等信息,从而能指导RMAN完成备份和
恢复的具体操作。 当RMAN获得了需要备份的文件列表以后,在将数据备份到备份介质上时,
需要建立到这些备份介质的通道(channel),每次备份时,我们就可以通过RMAN创建多个通
道以加快处理速度。 RMAN会为每个通道在目标数据库上创建一个对应的服务器进程,通道
类型有两种: 磁带和磁盘, 如果是磁盘,我们可以通过分配磁盘类型的通道(device type
disk),将数据备份到闪回恢复区(Flash Recovery Area); 如果分配的是磁带,我们需要
通过借助MML(Media Manangement Library), 使得RMAN可以将备份的数据通过MML传到磁带。
RMAN备份基本原理 ---
RMAN基于备份算法规则来编译要备份的数据文件列表。基于通道数和同时备份的数据文件
数,RMAN在ORACEL共享内存段中创建一些内存缓冲区, 一般是在PGA中, 不过有时候内存缓
冲区会被推入SGA。通道服务进程随后就开始读取数据文件,并在RMAN缓冲区中填充这些数据
块。一个缓冲区被填满时,输入缓冲区的数据就会推出到输出缓冲区。数据文件中的数据块都
会发生这种memery-to-monery write 的过程,如果数据块符合备份的标准,并且memery-to-monery
write操作没有检查到数据corruption则该数据块会被保存到输出数据缓冲区中,直到输出缓
冲区被填满。一但输出缓冲区被填满,输出缓冲区的内容就会被推到备份位置(磁盘或者磁带)
参考:
http://www.itpub.net/viewthread.php?tid=1024391
http://space.itpub.net/35489/viewspace-614151
http://space.itpub.net/35489/viewspace-539639
RMAN备份详细过程 ---
RMAN发出备份全库命令后,RMAN生成到目标数据库的bequeath连接,也就是说会检查
ORACLA_SID变量中的实例名,并在该实例上产生一个服务器进程,然后作为sysdba登陆,
然后会产生一个作为备份的通道(在PGA或者是在SGA分配存储)。随后RMAN调用SYS.DBMS_RCVMAN
请求数据库结构信息,包括控制文件的信息(当前序列号,创建时间……)由于指定了备份
全库,所以RMAN会请求数据库中数据文件信息,并判断是否存在offline数据文件(包括所在
的位置和工作方式)。
RMAN开始备份,为了保持数据一致性RMAN必须构建控制文件快照,接下来RMAN调用
DBMS_BACKUP_RESTORE数据包,该调用可以创建备份片。RMAN拥有文件列表,所以它为数据文
件读取操作分配内存缓冲区,分配缓冲区后RMAN初始化备份片。一旦初始化了备份片,RMAN
会判断是否使用了服务器参数文件,如果使用了则会做为备份的一部分,还要备份控制文件,
之后才开始备份数据文件,并将其推至内存。为了实现这一功能,通道进程在磁盘上执行预
读取操作,并且将多个数据文件读入内存中,RMAN会判断数据块头信息是否仍然为零,如果
数据块没有被使用过,就不会发生到输出缓冲区的写操作,同时会丢弃这个数据块(这就RMAN
为什么会只备份使用过的数据的原因,也是它的优点); RMAN还会执行检查数据块有没有
corruption操作。当检查通过了就被写入到输出缓冲区。一旦输出缓冲区填满了,就被推至
备份文件位置。
在备份数据块的时候,RMAN影子进程会得到备份状态信息。并将它传给V$session_longops
视图。查询它能得到信息。
当数据文件的所有数据块都被读入输入缓冲区并确定了状态之后RMAN就会通过将这个数据
文件写入备份片来结束该文件的备份操作。所有数据文件写入备份片之后,RMAN生成最后一个
对SYS DBMS BACKUP RESTORE 数据包的调用,该调用在控制文件中写入备份信息(包括备份片
名,启动备份操作时的检查点的SCN和完成备份的时间)。备份过程结束。
RMAN信息库(RMAN repository) ---
备份过程中产生的元数据,包括备份文件的名称、路径、完成备份的时间、检查点SCN 等
这些用来描述备份文件的数据,存放的地点叫做RMAN信息库。RMAN信息库可以存放在两个
不同的地点: 目标数据库的控制文件,或者恢复目录(Recovery Catalog)里 。
控制文件中的内容 ---
控制文件中存放的数据可以分为两类: 可删除的记录(包括归档日志文件的历史记录以及
RMAN备份的元数据)和不可删除的记录(包括数据文件列表和联机日志文件列表等),如果
需要在控制文件中存放新的记录,则可以通过删除那些可删除的记录,为新的记录提供
可用的空间,如果RMAN备份的元数据被删除,RMAN就不能获得有关备份的信息,从而也就
不能进行恢复了。
控制文件主要包含如下条目,可以通过dump控制文件内容看到 :
DATABASE ENTRY
CHECKPOINT PROGRESS RECORDS
REDO THREAD RECORDS
LOG FILE RECORDS
DATA FILE RECORDS
TEMP FILE RECORDS
TABLESPACE RECORDS
LOG FILE HISTORY RECORDS
OFFLINE RANGE RECORDS
ARCHIVED LOG RECORDS
BACKUP SET RECORDS
BACKUP PIECE RECORDS
BACKUP DATAFILE RECORDS
BACKUP LOG RECORDS
DATAFILE COPY RECORDS
BACKUP DATAFILE CORRUPTION RECORDS
DATAFILE COPY CORRUPTION RECORDS
DELETION RECORDS
PROXY COPY RECORDS
INCARNATION RECORDS
可以通过设置初始化参数controlfile_record_keep_time来决定控制文件中可删除
的记录所占用的空间,默认为7,表示控制文件中始终保持最近7天的可删除记录,
也就是说7天之前的备份信息及归档日志文件的历史记录被删除。如果设置为0,可重用部分就不会扩展,只要需要records就可以被重用。
恢复目录(Recovery Catalog) ---
为了让备份信息以及归档日志文件的历史记录保存更长的时间,Oracle还提供了恢复
目录(Recovery Catalog)来存放RMAN信息库。恢复目录由数据库里的多个表和存储过程
组成,这些对象位于同一个schema下。用表来存放RMAN备份的元数据,可以永久性的
保存下去,而不用删除历史记录来释放空间。
恢复目录是可选的配置,不是必需的。其中的数据从目标库的控制文件那里同步过来。
RMAN 的元数据始终都必须要存放一份在目标数据库的控制文件中,并不会因为我们配置
了恢复目录,就不在控制文件中记录备份的元数据了,在使用RMAN完成备份恢复操作以后,
会将控制文件里的RMAN元数据同步到恢复目录里,只不过,默认情况下,controlfile中
的元数据只保留最近7天的信息,恢复目录中则可以保留更长时间的元数据。不仅如此,
恢复目录还可以同时为多个目标数据库服务。 因此我们可以在同一个恢复目录里保留多个
目标数据库相关的RMAN元数据。
备注: 可以这样理解,如果存在恢复目录,那么目标库的控制文件类似“联机日志文件”,
而恢复目录就类似“归档日志文件”, 恢复目录中的所有内容都是从目标库的控制文件
中同步过来的,而默认情况下,目标库中的控制文件只是记录7天的元数据信息,而恢复
目录可以保留更长时间的元数据 (像归档一样) 。
如果要使用恢复目录,则在使用RMAN时,除了要建立到目标库的连接之外,还必须建立到
恢复目录所在数据库的连接,并在恢复目录所在库中创建对应的服务器进程和session.
RMAN 的组成及工作过程 --- 可执行程序及recover.bsq
RMAN由可执行程序和名为recover.bsq的脚本文件组成,RMAN可执行程序就是命令行接口
(命令解释程序),在备份和恢复过程中,它完成的实质性工作很少,进行的大部分都是协
调工作。
备份恢复工作的实质性工作是由目标数据库上的程序包完成的,对目标数据库上包的调用
就要借助于recover.bsq 脚本文件了,该文件在$ORACLE_HOME/rdbms/admin目录下,打开
文件可以看到里面都是各种PL/SQL脚本块。事实上,在RMAN交互界面中输入的各种命令,
都会被RMAN可执行程序转化为对recover.bsq文件中的各种相关的PL/SQL块的调用,并将
相关的PL/SQL块传递到目标数据库上去执行,从而完成对数据库的备份与恢复,可以说,
recover.bsq 才是RMAN备份恢复的核心 。
在recover.bsq文件包含的PL/SQL块中,主要调用了目标数据库中以下两个程序包。
dbms_rcvman : 用来读取目标库的控制文件信息,将这些信息传给RMAN, 从而RMAN可以
获得要备份的文件列表以及其他所需的信息。
dbms_backup_restore : 完成具体的备份恢复工作,并在控制文件中写入备份的元数据,
比如创建备份的时间,路径,大小等。
而且由于RMAN可以在数据库关闭的情况下进行备份,因此这两个包都是硬编码在Oracle
软件中的,在数据库没有启动的时候也能调用执行。
因为RMAN在备份恢复过程中,可能会需要启动和关闭数据库,因此在与目标数据库建立
连接时,必须以具有sysdba权限的用户身份进行连接。
RMAN备份是一个数据块一个数据块的读取和写入,如果在备份某个数据块时,发现它是
一个脏数据块,那么他可以等DBWn将内存里的内容刷新到数据文件以后,才备份该数据
块,因此RMAN是不需要发出begin backup命令的。 同时,RMAN备份处理split block与
热备份不一样,它不存在redo log激增的问题,是因为它在执行备份每个数据块的时候
会判断这个数据块是否是split的(RMAN比较块头块尾保证块的完整性),如果是,它会重
新读这个数据块直到得到一个consistent version。
在Oracle10.2.0.1及以前,RMAN只会对使用过的数据块进行备份(不管当前是否有数据),
因为RMAN可以在数据库关闭的情况下备份,因此RMAN备份时,只能从物理层面来判断某
数据块是否被使用过,如果某数据块头部被格式化过,RMAN就认为它被使用过,就会备份
该数据块。 但是Oracle10.2.0.2 或以后,Oracle只备份当前有数据的数据块 。
13.1.2 快速闪回区(Flash Recovery Area)
在Oracle10g中,Oracle为RMAN备份文件设置了默认的路径,也就是快速闪回区(Flash
RecoveryArea), 该区域可以是文件系统上的一个目录,也可以是ASM里的某个磁盘组。当
然RMAN备份文件可以不放在快速闪回区,但是通过对快速闪回区可以简化对RMAN备份文件
的管理。这块区域的文件都是OMF(Oracle Mananged File)管理的,文件名称大小都是由
Oracle自己来管理。而且该区域的空间管理也是自动的,当空间不足时,Oracle会根据
配置的冗余策略,删除不再需要的备份文件,空间出现压力时,会在alert log中记录该
信息。
通过下面两个参数设置快速闪回区:
db_recover_file_dest_size - 快速闪回区的大小
db_recover_file_dest - 快速闪回区的位置
SQL> show parameter db_recover
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/product/flash_recovery_area
db_recovery_file_dest_size big integer 2G
SQL>
当然快速闪回区不仅可以存储RMAN的备份文件,还可以存放控制文件(11g默认就会有一个控制
文件存放在此),联机日志文件,归档日志以及闪回数据库的闪回日志文件等。
我们可以通过v$flash_recovery_area_usage来了解该区域的使用情况,可以看到这块区域
可以存储的文件有很多,比如 controlfile, onlinelog , archivelog, backuppiece,
imagecopy(镜像副本), flashbacklog(闪回日志),还可以看他们的空间使用率。
备注: 闪回恢复区设置完成后,备份的过程就非常简单,首先需要规定闪回恢复区是使
用CONFIGURE备份的默认配置。然后,执行BACKUP或BACKUP AS COPY 命令,备份就会直接送
往闪回恢复区中进行集中存储。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/35489/viewspace-674714/ ,如需转载,请注明出处,否则将追究法律责任。