【数据库原理】(27)数据库恢复

在数据库系统中,恢复是指在发生某种故障导致数据库数据不再正确时,将数据库恢复到已知正确的某一状态的过程。数据库故障可能由多种原因引起,包括硬件故障、软件错误、操作员失误以及恶意破坏。为了确保数据库的安全性和完整性,数据库管理系统(DBMS)必须具有有效的恢复机制。

一.故障的种类

在数据库系统中,可能发生的故障主要包括事务故障、系统故障、介质故障和计算机病毒。每种故障类型都可能对数据库的正常运行产生影响,因此需要相应的恢复机制来应对这些故障。

1. 事务故障

事务故障指事务未达到预期终点,使得数据库可能处于不正确状态。这包括事务内部的非预期故障,如运算溢出、并发事务死锁等。恢复程序通过事务撤销,即回滚事务已做出的对数据库的修改,将事务恢复到未启动的状态,以保证数据一致性。

2. 系统故障

系统故障是指导致系统停止运转的各种事故,例如硬件错误、操作系统故障、DBMS代码错误、突然停电等。这类故障影响正在运行的所有事务,可能导致数据库非正常终止。在系统重新启动时,恢复子系统需要回滚未完成的事务,并重做已提交的事务,以将数据库恢复到一致状态。

3. 介质故障

介质故障,也称为硬故障,指外存故障,如磁盘损坏、磁头碰撞等。这类故障可能破坏整个数据库或部分数据库,影响存取这部分数据库的所有事务。在发生介质故障后,需要将后援副本装入数据库,并重新执行已成功完成的事务,将已提交的结果重新写入数据库。

4. 计算机病毒

计算机病毒是一种人为的故障或破坏,它可以繁殖和传播,对计算机系统,包括数据库,造成破坏。计算机病毒可能导致数据的损坏和系统的不稳定,需要采取相应的安全防护措施来避免病毒的侵害。

二.故障恢复

数据库系统的恢复机制涉及建立备份数据和如何利用备份数据来修复数据库。备份数据的建立通常采用数据转储和日志文件技术。

1. 数据转储

数据转储是将数据库定期复制到转储设备(如磁带或磁盘)的过程。转储设备中的备用数据库文件称为后备副本。静态转储和动态转储是两种常见的方式。

  • 静态转储和动态转储:

    • 静态转储: 在系统中无运行事务时进行的转储操作,转储时数据库处于一致性状态。静态转储简单但会降低数据库的可用性。
    • 动态转储: 允许在转储期间对数据库进行访问或修改,可以并发执行。需要记录转储期间各事务对数据库的修改活动,建立日志文件。动态转储克服了静态转储的缺点。
  • 海量转储和增量转储:

    • 海量转储: 每次转储全部数据库,便于恢复。
    • 增量转储: 每次只转储上一次转储后更新过的数据,适用于大型且频繁更新的数据库。
      【数据库原理】(27)数据库恢复_第1张图片

2. 日志文件

日志文件用于记录每一次对数据库的更新活动,分为数据块为单位和记录为单位的两种格式。登记日志文件的目的是为了数据库的恢复,包括事务故障恢复、系统故障恢复和介质故障恢复。

  • 作用:
    • 用于事务故障和系统故障恢复,协助后备副本进行介质故障恢复。
    • 在动态转储方式中,必须与后备副本一起使用。
    • 在静态转储方式中,可用于重新装入后备副本和对已完成事务的重做处理。

3. 恢复事务

发生故障时,首先根据前次转储的后备副本恢复数据库,然后利用日志文件进行事务的恢复。

  • 恢复步骤:

    1. 从头扫描日志文件,找出已经结束和尚未结束的事务。
    2. 对尚未结束的事务进行撤销(UNDO)处理和已经结束的事务进行重做(REDO)处理。
  • 撤销和重做处理:

    • 撤销处理: 反向扫描日志文件,对每个事务的更新操作执行反操作,恢复修改过的数据。
    • 重做处理: 正向扫描日志文件,重新执行登记的事务的操作,确保数据库恢复到正确状态。

三.恢复策略

恢复策略针对事务故障、系统故障和介质故障分别制定,以确保数据库的一致性和可靠性。

1. 事务故障恢复

事务故障是指事务在运行至正常终止点前被终止,恢复子系统通过利用日志文件撤销已对数据库进行的修改来进行事务故障恢复。

  • 步骤:
    1. 反向扫描日志文件,查找该事务的更新操作。
    2. 对该事务的更新操作执行逆操作,包括插入、删除和修改。
    3. 继续反向扫描日志文件,直到读到该事务的开始标记。

事务故障的恢复由系统自动完成,对用户透明,无需用户干预。

2. 系统故障恢复

系统故障分为两种情况:未完成事务对数据库的更新可能已写入数据库,已提交事务对数据库的更新可能还留在缓冲区没有写入数据库。因此,系统故障的恢复操作包括撤销故障发生时未完成的事务和重做已完成的事务。

  • 步骤:
    1. 正向扫描日志文件,找出已提交和尚未完成的事务,将其分别记录在重做队列和撤销队列中。
    2. 对撤销队列中的事务进行撤销操作,即反向扫描日志文件执行逆操作。
    3. 对重做队列中的事务进行重做操作,即正向扫描日志文件重新执行事务的操作。

系统故障的恢复由系统自动完成,无需用户干预。

3. 介质故障恢复

介质故障包括磁盘上的物理数据和日志文件的破坏,恢复操作涉及重装数据库并重做已完成的事务。

  • 步骤:
    1. 装入最新的数据库副本,将数据恢复到最近一次转储时的一致性状态。
    2. 若为动态转储,同时装入转储开始时刻的日志文件副本,利用系统故障恢复方法(REDO+UNDO)将数据库恢复到一致性状态。
    3. 若为静态转储,数据库即处于一致性状态。
    4. 装入相应的日志文件副本,重做已完成的事务。

介质故障的恢复需要DBA介入,但只需重装最近转储的数据库副本和相关的日志文件副本,然后执行系统提供的恢复命令。

综合这些恢复策略,数据库系统能够有效地处理各类故障,确保数据的完整性和系统的可靠性。

你可能感兴趣的:(数据库,数据库,服务器)