首页 百科知识 数据库操作时为什么处理日志文件

数据库操作时为什么处理日志文件

时间:2023-06-17 百科知识 版权反馈
【摘要】:8.4.2 数据库的恢复恢复也称为重载或重入,是指当磁盘损坏或数据库崩溃时,通过转储或卸载的备份重新安装数据库的过程。当数据库毁坏后可重新装入后备副本,把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重新处理,对故障发生时尚未完成的事务进行撤销处理。对于非正常结束的事务显然应该进行撤销处理,以消除可能对数据库造成的不一致性。

8.4.2 数据库的恢复

恢复也称为重载或重入,是指当磁盘损坏或数据库崩溃时,通过转储或卸载的备份重新安装数据库的过程。

1.数据库的恢复办法

数据库的恢复大致有如下这些办法:

(1)周期性地(如3天一次)对整个数据库进行转储,把它复制到备份介质中(如磁带中),作为后备副本,以备恢复之用。

转储通常又可分为静态转储和动态转储。静态转储是指转储期间不允许对数据库进行任何存取、修改活动。而动态转储是指在存储期间允许对数据库进行存取或修改。

(2)对数据库的每次修改,都记下修改前后的值,写入“运行日志”数集中。它与后备副本结合,可有效地恢复数据库。

日志文件是用来记录对数据库每一次更新活动的文件。在动态转储方式中必须建立日志文件,后备副本和日志文件综合起来才能有效地恢复数据库。在静态转储方式中,也可以建立日志文件。当数据库毁坏后可重新装入后备副本,把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重新处理,对故障发生时尚未完成的事务进行撤销处理。这样就不必重新运行那些已完成的事务程序,就可把数据库恢复到故障前某一时刻的正确状态,如图8-2所示。

img186

图8-2 数据库的恢复

2.利用日志文件恢复事务

下面介绍一下如何登记日志文件以及发生故障后如何利用日志文件恢复事务。

(1)登记日志文件(Logging)

事务运行过程中,系统把事务开始、事务结束(包括COMMIT和ROLLBACK)以及对数据库的插入、删除、修改等每一个操作作为一个登记记录(log记录)存放到日志文件中。每个记录包括的主要内容有:执行操作的事务标识、操作类型、更新前数据的旧值(对插入操作而言,此项为空值)和更新后的新值(对删除操作,此项为空值)。

登记的次序严格按并行事务执行的时间次序进行,同时遵循“先写日志文件”的规则。用户知道写一个修改到数据库和写一个表示这个修改的log记录到日志文件中是两个不同的操作。但有可能在这两个操作之间发生故障,即这两个操作只完成了一个。如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。因此为了安全应该先写日志文件,即首先把log记录写到日志文件上,然后写数据库的修改。这就是“先写日志文件”的原则。

(2)事务恢复

利用日志文件恢复事务的过程分为两步。

①从头扫描日志文件,找出哪些事务在故障发生时已经结束(这些事务有BEGINTRANSACTION和COMMIT记录),哪些事务尚未结束(这些事务只有BEGINTRANSACTION,无COMMIT记录)。

②对尚未结束的事务进行撤销(也称为UNDO)处理,对已经结束的事务进行重做(REDO)。

进行UNDO处理的方法是:反向扫描日志文件,对每个UNDO事务的更新操作执行反操作。即对已经插入的新记录执行删除操作,对已删除的记录重新插入,对修改的数据恢复旧值(即用旧值代替新值)。

进行REDO处理的方法是:正向扫描日志文件,重新执行登记操作。

对于非正常结束的事务显然应该进行撤销处理,以消除可能对数据库造成的不一致性。对于正常结束的事务进行重做处理也是需要的,这是因为虽然事务已发出COMMIT操作请求,但更新操作有可能只写到了数据库缓冲区(在内存),还没来得及物理地写到数据库(外存)便发生了系统故障,数据库缓冲区的内容被破坏,这种情况仍可能造成数据库的不一致性。由于日志文件上更新活动已完整地被登记下来,因此可能重做这些操作而不必重新运行事务程序。

总之,利用转储和日志文件可以有效地恢复数据库:

①当数据库本身被破坏(如硬盘故障和病毒破坏)时,可重装转储的后备副本,然后运行日志文件,执行事务恢复,这样就可以重建数据库。

②当数据库本身没有被破坏,但内容已经不可靠(如发生事务故障和系统故障)时,可利用日志文件恢复事务,从而使数据库回到某一正确状态,这时不必重装后备副本。

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

我要反馈