anshenoracle 2012-01-26
关于Oracle的备份知识,下面我是我的一些摘要和自己的理解:
1、Oracle中的数据块大小通常是OS块大小的整数倍,在用系统命令直接复制数据文件到备份介质的过程中,数据库一直可用的状态,oracle数据块可能在不断的被修改,被读写,使用操作系统命令复制数据文件时,是根据操作系统块大小进行copy的,也就是说复制一个操作系统块的时候,首先锁定这个块,复制完成以后,解锁这个块,这样这个块在复制前和复制后是一致的。但是对于一个Oracle数据库来说,一个块要分成几次进行复制,有可能在复制一个操作系统数据块的时候,另外一个操作系统数据块被改变了,导致oracle数据块在复制到备份介质以后,前一半是没有改动过的,后一半是改动过的,数据块的状态就出现了不一致的情况,这时候备份也就是无效的,这叫做分离数据块现象。
2、为了修复分离数据块现象,我们在备份某个表空间或者数据文件的的时候,首先发出begin backup命令,通知数据库我要开始开始备份了,在没有发出end backup命令之前,只要是进程修改了被备份的表空间所包含的数据块,oracle就会把该数据块中所包含的所有的数据行的数据生成重做记录,记录到日志文件中。
通过发出begin backup以后,第一次修改数据块中的数据行之前,在联机重做日志文件中记录数据块的修改前的数据,这样在需要恢复数据的时候,发现某个数据块是分离的,就会利用日志文件里的重做记录的数据对整个数据块进行恢复
3、备份表空间中的所有的被修改过的数据块的所有数据行都被保存在了联机重做日志文件中,而不是只记录被修改的数据行的记录,因此在热备份过程中,会发现生成的联机重做日志文件的量比较大,这取决于业务的繁忙程度,例如DML量比较大,那么产生的日志会非常的多
4、发出begin backup命令以后,oracle会对被备份的表空间所对应的数据文件触发文件级别的检查点进程,将内存中属于该表空间的所有脏数据块写入数据文件,检查点结束以后,数据文件头部(第一个和第一个数据块)的检查点SCN和日志序列号都不在变化,直至发出end backup,数据文件头部的SCN和日志序列号才被更新
5、在热备份的过程中,数据文件头部的SCN和日志序列号被冻结,但是数据文件本身还是最新的,和正常一样的更新和使用,DML更新了某个表,这些更新都会被写入到数据文件中去。冻结数据文件头部的SCN号和日志序列号,是为了将来使用热备份进行恢复的时候,能够知道应该从哪里开始应用重做记录,也就是备份的数据文件头部所记录的SCN和日志序列号,定位到日志文件中,从日志文件中找到开始的SCN,向后应用所有的日志文件
6、发出end backup命令以后,所有的数据文件的头部SCN号和日志序列号更新到最新,因为数据文件本身就是最新的。