从数据库恢复基本策略中可知,影响数据库恢复的主要是日志文件和数据库备份.
1. 日志文件
日志文件是用来记录事务对数据库更新的文件.如果以记录为单位形成日志文件,其内容包括:
(1)事务的开始标志(BEGIN TRANSACTION);
(2)事务的结束标志(COMMIT或ROLLBACK);
(3)事务的所有操作,包括操作的类型(插入,删除,修改),操作对象(记录的内部标识),操作的数据(更新前后的值).
日志文件在数据库的恢复中起着重要的作用,用来恢复事务故障和系统故障,并协助恢复介质故障.具体作用是:
(1)事务故障和系统故障的恢复必须使用日志文件进行撤销(UNDO)或重做(REDO);
(2)在介质故障的恢复时,首先利用数据库备份还原到备份点,从备份点到故障点,根据日志文件,采用REDO和UNDO方法,将数据库恢复到故障点的一致状态.如果日志文件损坏,则只能恢复到备份点的一致状态,需要手工提供备份点到故障点的事务.
日志文件严格按并发事务执行的时间顺序进行登记,并且先写日志文件再写数据文件.如果先写了数据文件而在写日志文件时发生错误,导致日志文件没有记录这个修改,则在以后就无法恢复该修改了;如果先写了日志文件而在写数据文件时发生错误,导致没有修改数据库,可按日志文件进行重做(REDO).
日志文件记录了大量的操作信息,日志文件一般采用轮回交替方式进行写入,如:三个日志文件A,B,C,每个文件的大小100M,开始写A,写满后A后,然后依次写B和C,当C写满后,又重新写A.在重新写A时可以有归档后重写或直接覆盖两种处理.
在重新写A文件之前,将其中的日志转储到其它设备,然后清空A的内容,以便将新的日志内容写入A,称为日志归档.同理,在写满B,C后依次将B,C的内容进行归档,形成归档日志.归档日志是脱线的历史日志唯一数据,与没有写满的在线的A或B或C日志相比,在介质恢复的作用不同.
从上图可知,至少应该保存从备份点开始的归档日志(如果有).为了防止因为介质故障导致的日志文件损坏,要对日志文件进行备份.根据日志是否在线,其采用的备份方法不同.
在线日志:由于其在线,一般采用动态的备份方法,其备份策略是采用磁盘冗余技术.如RAID1或RAID1+0,以便适应大量写入,少量读出的操作,又能有效防止因为单个磁盘故障引起的在线日志丢失,但不能防止灾难性的故障,如火灾,地震导致的全部磁盘损坏的故障.
归档日志:由于其脱线,一般采用静态转储的备份方法,将归档日志转储在大容量的磁盘,磁带,异地网络服务器上.
在有些DBMS系统中,软件系统实现日志文件的备份(称为软备份),如Oracle中采用软件冗余的方式.对于归档日志文件同时归档到多个文件副本,只要将多个文件副本分别指向不同的磁盘就达到了介质冗余的目的.对于在线日志文件,分成组,按组轮流交替写入,每组有多个成员文件,将相同的内容同时写入每组中的每个成员文件,只要将每组的不同成员分布在不同的磁盘就达到了介质冗余的目的,这种方式叫多重日志文件.
2. 数据库备份
数据库备份是将数据库中的数据复制到另外的存储介质中,如磁盘或磁带,产生数据库副本.数据库副本的作用是,当数据库介质故障时,重新将副本装入,还原到副本产生时(备份点)的一致状态.如果要恢复到故障点的一致状态,要使用日志文件.
数据库备份可以采用操作系统的文件形式复制数据文件,称为物理备份;也可以采用DBMS特有的形式复制数据库,称为逻辑备份,逻辑备份一般使用DBMS系统专用的导入/导出工具.
备份的方法可以是静态的,也可以是动态方式.
静态备份:是指系统中无任何事务时进行的复制操作,一般是在数据库关闭状态下进行的,所以又称为冷备份.由于复制期间不允许任何事务对数据库进行操作,所以静态备份得到的是一个有一致性的副本.静态备份比较简单,但是必须停止所有的事务,只有备份完成后,事务才能运行,这会降低数据库的可用性.
动态备份:是指允许其它事务对数据库进行操作的同时进行数据的复制,是并行执行的.动态备份可以克服静态备份的缺点,不用停止其它运行的事务,也不影响新的事务,不用关闭数据库.但是复制后的副本不能保证事务的一致性.
由于数据库中数据量比较大,备份是比较费时的,并且占用较大的空间.备份可以采用完全备份和增量备份两种方式.完全备份是备份全部的数据;增量备份是在前一次备份的基础上,只备份变化的部分.第一次备份采用完全备份,后续的备份可以采用增量备份.
