我们知道操作系统(OS)复制操作的粒度是OS块,而oracle的粒度oracle block是OS block的倍数,这样在使用OS命令进行复制时,有可能发生这种的情况,你把oracle块中的前部分复制走了,而这时DBWn重写了oracle块,然后OS复制命令完成oracle块剩余部分的复制,这样就造成操作系统命令复制的oracle块中的数据不一致,即块内容的不一致性"fractured"。 为了避免出现不一致的fractured块,可以使用ALTER TABLESPACE BEGIN BACKUP,这样当有服务器进程更新database buffer cache中的块时,会把整个块镜像写入log buffer,这个块镜像会保持读一致性,这样当需要保存数据文件时,任何fractured块都会被redo log中的读一致性镜像块替换。所以当热备中出现fractured块时,oracle可以自动修复它们。但是这样会使日志切换频繁,增加I/O,降低数据库性能。
与OS复制相比,RMAN在处理热备的时候可以较好地解决fractured块的问题。如果RMAN检测到DBWn更新了正在执行热备的块时(块更新时会改变块头的SCN),RMAN会重新读取这个oracle block,直到获得读一致性的块镜像。
full backup可以说是数据文件的拷贝,备份数据文件中的每个数据块used和unused block。
在oracle中,只有RMAN才能执行incremental备份。增量备份比完全备份节省空间、更快、减少I/O。增量备份是分等级的,从0级开始,一级一级递增(共有9级),不过常用的是0级和1级。0级备份是1级备份的基础,0级备份类似全备份,不过0级备份只备份已经使用的数据块。
增量备份又可分为差异增量备份和累积增量备份,差异增量备份只备份自从最近一次增量备份完成之后发生改变的数据块的变化,如1级差异增量备份只会备份上次1级增量备份以来发生改变的数据块的变化,而累积增量备份则是备份自从上一次低级备份以来发生改变的所有数据库块的变化,如1级累积增量备份会备份自从上次0级增量备份以来发生改变的所有块的变化。
第一天执行了0级增量备份(在执行1级增量备份前,RMAN会默认执行0级增量备份),2、3、4、5天执行了1级差异增量备份,第6天执行了1级累积增量备份,7、8、9、10天1级差异增量备份,第11天执行0级增量备份,开始新的循环。
cumulative incremental backup 累积增量备份
differential incremental backup 差异增量备份,星期日Sun执行了0级增量备份。
来源:oracle文档和 http://www.dbabeta.com/2010/a-note-on-oracle-incremental-backup.html
whole backup是备份所有的数据文件,控制文件和spfile(如果有)。不备份online redo log。
partial backup可以备份多个数据文件,或者还有控制文件。明显的部分备份的文件与数据库的其他部分是不一致的,所以在使用partial backup还原(restore)数据库时,需要使用archived 和online redo log把它恢复到指定的日期,与数据库其余部分保持一致性。
image copies versus backup sets
image copy是与源文件完全一样的拷贝文件,可以是数据文件、控制文件、归档日志文件
backup set备份集是由RMAN生成的特殊结构的文件,是由包含数据文件、控制文件、或 归档日志文件的物理文件--片,组成的文件。backup set只能由RMAN生成和解码。RMAN生成的备份集文件,相较于OS命令生成的镜像文件,占用更少的空间,因为backup set只包含已使用的块,不包含任何没有使用的空块。
参考资料:
1)oracle文档
2) http://www.dbabeta.com/2010/a-note-on-oracle-incremental-backup.html
3) Oracle Database 10g OCP Certification All-in-One Exam Guide