在 Oracle 中,联机备份要求在 ARCHIVELOG 模式中执行对数据库的操作。在一个在线商店中,数据库必须是 24x7 都处于打开状态的,所以,让用户进行脱机备份而不访问数据库是不可能的。在这种场景中,应该在 ARCHIVELOG 模式下运行数据库,在该模式中,事务将继续运行,同时,备份处理也在继续。
与脱机备份不一样,联机备份只要求备份数据文件和控制文件。脱机数据库的备份单位是整个数据库,而联机备份的备份单位是一些或全部表空间。
在 Oracle 中,联机备份的全部思想是,当用户执行事务时,将对数据库所做的所有更改(提交或未提交的)都存储到重做日志缓冲区中,随后由 LGWr 进程把它们写到联机重做日志文件中。重做日志是以循环的方式写入的;因此,在重写它们之前,需要通过启动 ARCH 进程来手动或自动对重做日志进行归档。当记录了所有事务并在以后通过多路复用进行归档时(使用参数 LOG_ARCHIVE_DUPLEX_DEST),假如需要进行媒介恢复,那么可以使用这些归档的重做日志进行恢复。
注重,使用联机备份本身无法保证您不丢失数据。像通过多路复用(放在不同的位置)控制文件使数据库免疫、使用联机重做日志和归档重做日志这样的步骤,都是避免单点故障所必需的。
在 Oracle 中,要从默认的脱机备份切换到具有自动归档的联机备份,您需要执行下面的操作:
在 init.ora 中,用适当的值填写参数 LOG_ARCHIVE_START、LOG_ARCHIVE_DEST、LOG_ARCHIVE_FORMAT 和 LOG_ARCHIVE_DUPLEX_DEST 和 LOG_ARCHIVE_DEST_N。
关闭和启动装入(Mount)。
在 archivelog 模式下操作数据库。
打开数据库。
验证归档日志清单。
归档所有日志。
备份所有新创建的日志。
通过执行命令“Alter Tablespace ts_name Begin Backup”,将任何或所有联机表空间置于联机备份模式来启动联机备份。当发出这个命令时,处于联机备份模式的所有数据文件都将被发放检查点 SCN。换句话说,将把数据缓冲区的所有脏位刷新到数据文件。在初始检查点 SCN 后,就不会再发放新的检查点 SCN。对于没有处在联机备份模式的那些数据文件,随后的检查点将在它们的文件头中添加 SCN。当发出 “Alter Tablespace ts_name End Backup”时,在联机备份数据文件的的文件头中再次记录了检查点 SCN。Begin Backup 和 End backup 命令让 Oracle 知道要重做什么操作,及在前滚会在什么地方终止。
Oracle 建议在 Begin backup和 End backup命令之间耗用最少的时间。此外,应该在这段时间内尽量少进行用户活动,这是由于 Oracle 会在第一次更改块时记录下整个块的映像。对于联机备份数据文件,这将导致生成大量的重做日志。实际上,在执行 Begin backup后,接下来应该马上执行系统复制,然后由 End backup 来快速结束操作。备份是严格按照顺序进行的,这意味着在备份了表空间 1 中的数据文件后,将继续备份表空间 2 中的数据文件。
对于联机备份,需要非凡注重 SYSTEM 表空间和回滚段表空间。同时,还需要确保只要对数据库的模式进行了更改,就要对控制文件进行备份。备份脚本应该反映最新的模式。
DB2 UDB 联机备份
DB2 UDB 执行时间点恢复的机制类似于 Oracle。要了解 DB2 UDB 联机备份和恢复,就需要了解归档日志记录。有三种我们需要熟悉的日志定义:
活动日志 —— 该日志包含没有提交或回滚的事务,或者已提交但尚未刷新到磁盘的事务。
联机归档日志 —— 该日志包含已提交并且被记录到硬盘的事务的信息,和活动日志位于同一目录。
脱机归档日志 —— 假如将联机归档日志从活动日志所在目录移动到其他目录或磁带中,就成为了脱机归档日志。
有许多与日志记录有关的配置参数:
LOGFILSIZ —— 每个日志文件的大小,默认值是 250,单位为 4KB。
LOGPRIMARY —— 主日志文件的个数(默认值是 3)。
LOGSECOND —— 主日志文件占用满时,可以分配的二级日志文件的个数。当把这个参数设为 -1 时(版本 8),可以使用无限数量的活动日志。
NEWLOGPATH —— 用来更改日志文件的存储位置。要想使该参数生效,需要重新激活数据库。
MIRRORLOGPATH —— 日志文件的镜像路径,以避免单点故障。
OVERFLOWLOGPATH —— 指定前滚期间可以在哪些目录搜索需要的日志,以答应前滚操作能访问多个目录中的日志。
USEREXIT——用于启动用户出口功能,进行日志的自动归档。
BLK_LOG_DSK_FUL——当 DB2 无法在活动日志路径中创建新日志文件时,防止生成磁盘已满错误。
为了使用联机备份,必须打开归档日志记录。通过将 LOGRETAIN 设为 ON,可以打开归档日志记录。
归档日志记录是一种不同于循环日志记录的日志记录机制,因为循环日志记录重写了提交的日志,而归档日志记录归档了提交的日志。
在归档日志记录中,不能重用已经变成归档日志的日志。要移动那些联机归档日志,您需要手动移动它们或者使用用户出口程序(user exit)来移动它们。 图 1举例说明了归档日志记录机制:
图 1. 活动、联机和归档的日志记录
图中的 LOG (n+1)是活动日志,log (n) 和 log (n-i)(其中 i
要防止脱机归档日志的单点故障,比如媒介失败,则应该使用日志镜像。MIRRORLOGPATH 是用来指定镜像路径的配置参数,它答应 DB2 将相同日志文件的第二份副本写入不同目录中。您需要重新激活数据库,以使 MIRRORLOGPATH 配置参数变得有效。
假如将副本写入镜像日志路径时发生问题,那么 DB2 将在治理通知日志中写入消息,指出已经碰到错误。DB2 将继续把日志记录写入能工作的日志路径中。不需要同步日志路径。要确定哪个日志是活动的,哪些日志是归档的,请使用 DB2 命令 GET DB CFG 来查看“第一个活动日志文件”。该命令提供了目前活动的日志文件,因此被归档的日志将是那些比当前日志更早的日志。
此外,诸如数据库、表空间或增量的备份的每个备份操作都将包括恢复历史文件(RHF)的一个副本。您可以使用历史文件中提供的信息,将整个数据库或数据库的一部分恢复到某个时间点。每个数据库都会创建一个恢复历史文件,并且在下列情况下会自动对该文件进行更新:
备份数据库或表空间。
恢复数据库或表空间。
前滚数据库或表空间。
创建表空间。
修改表空间。
休止表空间。
重命名表空间。
删除表空间。
加载表。
删除表。
重组表。