Oracle恢复内部原理(热备份)
Oracle热备份指在数据文件正在使用的时候对其进行复制。复制的过程中,DBWR也在进行,因此备份可能得到一些“不一致”的备份:
a.一些数据块可能比其他块的时间要早
b.一些数据块的SCN可能比数据文件头部的SCN还要早
c.一些块可能包含了一个重做记录的部分更新,其他的部分可能在这个数据文件上或者其他数据文件上
d.一些数据块可能会被损坏,因为块的头部和尾部是在不同的时间复制的。
上面的这种复制方式得到的备份集在还原后和介质恢复的时候是没有用的。介质恢复时会从数据文件上的开始热备SCN(见4.1中第二步)直至恢复过程结束(完整或不完整的恢复)。这样数据文件从事务上讲是一致的。
热备份一共有三个步骤:
a.执行命令:ALTER TABLESPACE ... BEGIN BACKUP.
b.调用操作系统的复制工具复制该表空间下所有数据文件。
c.执行命令:ALTER TABLESPACE ... END BACKUP
4.1 BEGIN BACKUP
BEGIN BACKUP命令实际对表空间的所有数据文件进行下列操作(不需要按顺序):
1. 在每个数据文件头部设置了热备份模糊标志位,表明该数据文件处于热备份状态。带有这种标记的数据文件头表明这个备份是热备份。标志的目的是冻结这个数据文件头部的检查点(停留在begin backup命令发出那一刻的SCN)。这个值作用在于当备份被还原时,介质恢复能从足够早的SCN开始重新应用重做日志。因为我们不能保证数据文件头首先被复制,因此热备份期间要将数据文件头的检查点冻结支持热备份结束。这个标准也冻结了数据文件的检查点(以及在控制文件中的记录的检查点),以免被线程检查点更新。7.2版本后数据文件头新增了一个备份检查点以接收原本属于被冻结的检查点该接收的更新。
2. 做了一个数据文件检查点操作,捕获了开始热备时候的检查点信息,包括开始热备的SCN。当数据文件被检查点时,所有实例都要刷新跟该数据文件有关的脏数据。如果此时需要实例恢复,检查点将等待恢复完成再继续。在开始备份的时候对数据文件进行检查点操作保证了在热备份期间,只有在发出热备份命令之后的时间里修改的块可能会被写到数据文件上。
3. [跟平台有关,可选]:热备份后开始数据块的前镜像记录。记录过程中,所有实例将每个要修改块的完整的块而不是修改向量记录到重做日志中。这是为了防止恢复中遇到零碎的块(不一致的块),这多发生在数据块的大小比操作系统的块要大的时候,更新数据块导致前一部分和后一部分分别在不同的时间被复制。在热备份后恢复进程可以利用重做日志中的记录的完整前镜像构建数据块。
4. 设置数据文件头部的检查点跟开始热备份时刻的检查点一致,并冻结它直至发出“END BACKUP”命令。
5.清除了数据文件的联机模糊位标志。在热备份期间该状态位一直是被清除的,直至发出“END BACKUP”命令。
4.2 复制文件
复制是由操作系统的工具来完成。管理员必须保证复制操作发生在“BENGIN BACKUP”和“END BACKUP”之间或者文件没有使用的时候。