RMAN备份,热备份相关概念

来源:互联网 发布:软件开发ppt 编辑:程序博客网 时间:2024/05/17 03:20

一 认识数据库物理备份和逻辑备份
ORACLE中数据备份分为物理备份逻辑备份两种。

物理备份就是转储ORACLE物理文件(如数据文件、控制文件、归档日志文件等,以Block为单位的动作),一旦数据库发生故障,可以利用这些文件进行还原;

逻辑备份就是对数据库对象(如用户、表、存储过程等)利用类似EXP等工具进行导出工作(以SQL语句等脚本为单位的动作),可以利用IMP等工具把逻辑备份文件导入到数据库。

RMAN备份是一种物理备份,不是对象级的逻辑备份,可以用RMAN来备份数据文件、控制文件、参数文件、归档日志文件

逻辑备份是通过逻辑手段记录要备份的数据库对象的信息,是一种对象级备份的方案,因此逻辑备份的备份集的可移植性比较强,可以把数据库的逻辑备份恢复到不同版本不同平台的数据库上,也正是因为逻辑备份是对象级的备份,因此备份和恢复的效率比较低,对于大型的系统,采用逻辑备份,其恢复时间之长是大多数大型业务系统所不能忍受的。 相对而言,物理备份不具备移植性,备份环境和恢复环境必须是完全相同的,由于物理备份是对数据库的文件(Block)进行备份,其备份和恢复速度相对比较快,在大型业务系统中较多地使用物理备份。总之,逻辑备份效率低可以跨平台物理备份效率高不能跨平台
注意: RMAN backup可以实现仅备份有数据的block从而提高备份效率。 热备份及RMAN备份是OS Block为单位拷贝。
二 RMAN备份原理 

原理:   RMAN基于备份算法规则来编译要备份的数据文件列表。基于通道数和同时备份的数据文件数,RMAN在ORACLE共享内存段中创建一些内存缓冲区,一般是在PGA中,不过有时候内存缓冲区会被推入SGA。通道服务进程随后就开始读取数据文件,并在RMAN缓冲中填充这些数据块。一个缓冲区被填满时,输入缓冲区的数据就会推出到输出缓冲区。数据文件中的数据块都会都会发生这种memery-to-monery write的过程,如果数据块符合备份的标准,并且memery-to-monery write操作没有检查到数据corruption, 则该数据块会被保存到输出数据缓冲区中,直到输出缓冲区被填满。一旦输出缓冲区被填满,输出缓冲区的内容就会被推到备份位置(磁盘或者磁带)
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备份与常用物理Standby备份(热备份)区别
1.用户管理备份与恢复原理
alter tablespace users begin backup 的时候是锁定了users表空间对应的数据文件头的change scn.首先考虑一下数据库怎么用日志文件做恢复: 查找不一致的数据文件(根据文件头中旧的scn)如果锁定了文件头,这个文件头中的scn就不会改变(当然了, 数据块还是会变化的,还可以做读写)。 然后就会应用这个scn到现在的日志。那我锁定了scn,不管你后边怎么修改,总之做恢复的时候是应用锁定的时候的scn一直到现在的日志(完全恢复的话).
select tablespace_name,checkpoint_change#,checkpoint_count,name from v$datafile_header;
alter system checkpoint;
热备份归档增加的原因:  热备份的时候redo log会增长较快,归档较平时增多,是由于在begin backup之后,如果正在备份(也就是OS命令拷贝cp)的数据块恰好又在被用户修改(因为是热备份,用户可以操作),那么可能会产生split block的情况(split block被oracle认为是corrupt block),也就是说,一个Oracle Block可能包含多个OS Block, OS Level的拷贝可能正拷贝的是一个Oracle Block的一部分(比如Header),而另一部分(比如尾端)被用户更新,发生变化,这样导致一个Oracle Block内部的不一致(不是consistent version),可能出现一个数据块包含了几个不同版本的操作系统块,被称为Split Block(注意,这里split block是Oracle Block不是OS Block,是因为一个Oracle Block中不同版本的OS Block才导致产生Split Oracle Block的)。Oracle处理Split block的方法是将整个当前Oracle split block(变更后的)写入online redo log中,恢复的时候如果发现datafile中某个Oracle Block中有不同版本(的OS Block),就从redo把这个变更后的镜像拷贝回来,在这个版本一致的镜像上开始恢复。 不是像原来那样只写入更新部分到redo log,所以热备期间redo log会激增 。
RMAN备份处理split block与热备份不一样,它不存在这样的问题,是因为它在执行备份每个数据块的时候会判断这个数据块是否是split的,如果是,它会重新读这个数据块直到得到一个consistent version。

 
RMAN结合 带库  的备份是OS拷贝无法比的,从备份的速度上而言可能有很大差异, RMAN可以多个进程进行备份和恢复,?9i可以进行block  recover,可以进行增量备份,10G中结合新增的日志更有效的进行增量备份和可以回退整个数据库。  RMAN的缺点就是复杂,不使用catalog数据库的话控制文件丢失问题比较严重,解决很麻烦。
 
注意:  9i, 10g RMAN备份机制不太一样。9i的rman增量备份实质上是将所有的db block做了一次遍历,比较scn号是否发生变化,然后重新备份更新的OS块直到得到一个一致版本的Oracle Block;10g是做了一个scn变化表,增量备份的时候直接从改变读取变化的块 。
 
 
2. RMAN备份与恢复原理
Rman备份并不需要将数据库或者表空间置于backup状态,但是它会把scn记录在catalog中对应你的backupset,准备在恢复的时候来使用.
list backup of database;
恢复的时候应用CKP SCN开始到现在的归档日志和重做日志。
 
RMAN的增量备份的基本原理其实很简单,主要就是弄明白怎么样在做增量备份时确定某个数据块需要备份,哪个不需要, RMAN在做1级备份的时候怎么来确定0级备份之后都有哪些数据块做了修改呢?看下面一段
 
Each data block in a datafile contains a systemchange number(SCN),which is the SCN at which the most recent change was made to the block. During an incrementalbackup,RMAN reads the SCN of each data block in the input file and
compares it to the checkpoint SCN of the parentincremental backup. If the SCN in the input data block is greater than or equal to the checkpoint SCN of the parent,then RMAN copies the block.
 
原来block里边也有一个change scn也就是说在做level 1级备份的时候,需要扫描所有的数据块并且用块中记录修改的SCN跟level 0备份时的SCN做比较(备份记录中的Ckp SCN),来确定这个块是否需要备份。
在10g中rman做增量备份不再需要扫描整个数据文件了10g引入的新特性block change tracking:Block change tracking进程记录自从上一次备份以来数据块的变化,并把这些信息记录在跟踪文件中。RMAN使用这个文件判断增量备份中需要备份的变更数据。这极大的促进了备份性能,RMAN可以不再扫描整个文件以查找变更数据。
 
RMAN's change tracking feature for incremental backups improves incremental backup performance by recording changed blocks in each datafile in a change tracking file. If change tracking is enabled,RMAN uses the change tracking file
to identify changed blocks for incremental backup,thus avoiding the need to scan every block in the datafile.