首页 百科知识 数据库的备份与恢复

数据库的备份与恢复

时间:2022-10-17 百科知识 版权反馈
【摘要】:数据库的恢复就是保证数据库的正确性和一致性,即可通过系统存储在别处的冗余数据来重建被破坏或不正确的数据。数据备份是指定期或不定期地对数据库数据进行复制。动态转储是指转储期间允许对数据库进行存取或修改。此时恢复子系统可以利用日志文件撤销此事务对数据库进行的修改。

1.4.2 数据库的备份与恢复

一、数据库故障的种类

(1)事务内部的故障

事务内部的故障有些是可预见的,这样的故障可以通过事务程序本身来发现。如在银行转账事务中,当从A账户转账到B账户时,如果A账户中金额不足,则不能进行转账。其中对金额的判断在事务的程序中就可以完成。如果发现不能转账,对事务进行回退即可。但事务内部很多故障是非预期的,不能由事务程序处理。如运算溢出或因并发事务死锁而被撤销的事务等。

(2)系统故障

系统故障是指造成系统停止运转、重启的故障。如硬件错误(CPU故障)、操作系统故障、突然停电等都是系统故障。这样的故障会影响正在运行的所有事务,但不破坏数据库,这时内存中的内容全部丢失。

因此,恢复子系统必须在系统重启动时撤销所未完成的事务,并重做所有已提交的事务,以保证将数据库恢复到一致状态。

(3)其他故障

介质故障或由计算机病毒引起的故障或破坏可归为其他故障。

介质故障指外存故障,如磁盘损坏等。这类故障发生的可能性小,但是破坏性很大,会影响到所有正在操作数据库的事务。

数据库的恢复就是保证数据库的正确性和一致性,即可通过系统存储在别处的冗余数据来重建被破坏或不正确的数据。

二、数据库备份

数据恢复涉及两个关键问题:一是如何建立冗余数据;二是如何利用这些冗余数据实施数据库恢复。下面介绍如何建立冗余数据,即如何进行数据备份。

数据备份是指定期或不定期地对数据库数据进行复制。可以将数据复制到本地机器,也可以复制到其他机器上。备份的介质可以是磁带也可以是磁盘。数据备份是保证系统安全的一项重要措施。

在制订备份策略时,应考虑如下方面:

■ 备份的内容

备份数据库应备份数据库中的表(结构)、数据库用户(包括用户和用户操作权)以及用户定义的数据库对象和数据库中的全部数据。表应包含系统、用户定义的表,还应该备份数据库日志等内容。

■ 备份频率

可从下面两个方面来考虑备份的频率:一是数据库出现故障时,允许丢失的数据量的大小;二是数据库的事务类型(读多还是写多)以及事故发生的频率。不同数据库管理系统提供的备份种类也不尽相同。通常情况下,数据库可以每周备份一次,事务日志可以每日备份一次。对于一些重要的联机事务处理数据库,数据库可以每日备份,事务日志则每隔数小时备份一次。

日志的备份速度比数据库备份快,但在出现故障时,采用日志备份的恢复时间较长。

建立数据备份最常用的技术是数据转储和登记日志文件。

■ 数据转储

数据转储指数据库管理员定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。当数据库遭到破坏后,可将后备副本重新装入,并重新运行自转储以后的所有更新事务。

数据转储可分为静态转储和动态转储。

静态转储是指在系统中无运行事务时进行的转储操作。即转储操作开始的时刻,数据库处于一致性状态。转储期间不允许或不存在对数据库的任何存取、修改操作。转储必须等到正在运行的用户事务结束后才能进行,同样新的事务必须等待转储结束后才能执行。

动态转储是指转储期间允许对数据库进行存取或修改。即转储和用户事务可并发执行。动态转储可以克服静态转储的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的运行。

转储还可以分为海量转储和增量转储两种类型。海量转储指每次转储全部数据库;增量转储指每次只转储上一次转储后更新过的数据。

由于数据转储可分为在静态和动态两种状态下进行,因此数据转储方法可以分为四类:静态海量转储、静态增量转储、动态海量转储和动态增量转储。

■ 登记日志文件

① 日志文件的格式和内容

日志文件是用来记录数据库的更新操作的文件。不同的数据库采用的日志文件格式也不尽相同。日志文件主要有两种格式:一种是以记录为单位的日志文件;另一种是以数据块为单位的日志文件。

以记录为单位的日志文件需要登记的内容包括:各个事务的开始(BEGINTRANSACTION)标记;各个事务的结束(COMMIT或ROLLBACK)标记;各个事务的更新操作。

以数据块为单位的日志文件的内容包括事务标识和更新的数据块。由于将更新前的整个块和更新后的整个块都放入了日志文件中,所有操作类型和操作对象等信息就不必放入日志记录中。

② 日志文件的作用

日志文件在数据库恢复中起着非常重要的作用。其具体作用是:能够用来进行事务故障恢复、系统故障恢复工作;在动态转储方式中必须建立日志文件,后备副本和日志文件综合起来才能有效地恢复数据库;在静态转储方式中,也可以建立日志文件,当数据库毁坏后可重新转入后备副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,可以把已完成的事务进行重做处理,而对于故障发生时尚未完成的事务则进行撤销处理,这样不必重新运行那些已完成的事务程序就可以把数据库恢复到故障前某一时刻的正确状态。

③ 登记日志文件

为保证数据库的可恢复性,登记日志文件必须遵循两条原则:一是登记的次序严格按照并发事务执行的时间次序;二是必须先写日志文件,后写数据库。把对数据的修改写到数据库中与把表示这个修改的日志记录写到日志文件中是两个不同的操作。在这两个操作之间可能会发生故障,即两个写操作只完成了一个。如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,则按日志文件恢复时只不过是多执行一次没有必要的UNDO操作,并不会影响数据库的正确性。所以为了安全,一定要先写日志文件,后写数据库的修改。

三、数据库恢复

当系统运行过程中发生了故障,利用数据库后备副本和日志文件就可以将数据库恢复到故障前的正确状态即某个一致性状态。不同故障其恢复策略和方法也不同。

(1)恢复策略

■ 事务故障的恢复

事务故障指事务在未运行到正常终止点前就被终止的情况。此时恢复子系统可以利用日志文件撤销此事务对数据库进行的修改。事务故障的恢复是由系统自动完成的,对用户是透明的。

事务故障恢复的步骤是:反向扫描文件日志,查找该事务的更新操作,对该事务的更新操作执行逆操作,如此处理下去,直至读到此事务的开始标记,事务恢复就完成了。

■ 系统故障的恢复

系统故障造成数据库不一致状态的原因有两个:一是未完成事务对数据库的更新可能已经写入数据库;二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。因此恢复系统故障的操作就是撤销故障发生时未完成的事务,重做已完成的事务。

系统故障恢复的步骤是:正向扫描日志文件,找出故障发生前已提交的事务(既有BEGIN TRANSACTION的记录,也有COMMIT的记录),将其重做;同时找出故障发生时未完成的事务(只有BEGIN TRANSACTION的记录,无相应的COMMIT的记录),撤销这些事务。

■ 介质故障的恢复

介质故障会破坏磁盘上的物理数据库和日志文件,这是最严重的一种故障。恢复方法是重装数据库管理系统,然后利用数据库后备副本,重做已完成的事务。

(2)恢复方法

利用数据库备份、事务日志备份可以将数据库从出错状态恢复到最近的正确状态。

■ 利用备份技术

由数据库管理员定期对数据库进行备份,生成数据库瞬时正确状态的后备副本。

当发生故障时,利用这些后备副本可将数据库恢复到故障前的正确状态。

■ 利用事务日志

事务日志记录了对数据库数据的所有更新操作。利用事务日志文件可以恢复非完整事务,即从非完整事务当前值按事务日志记录的顺序撤销已执行操作,直到事务开始时的数据库值为止。这个恢复一般是系统自动完成的。

■ 利用镜像技术

镜像是指在不同设备上同时存有两份数据库,我们把其中一个设备称为主设备,另一个称为镜像设备。主设备与镜像设备互为镜像关系。当主数据库更新时,DBMS自动把更新后的数据复制到另一个镜像设备上,保证主设备上的数据库与镜像设备上的数据库一致。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈