数据库的恢复技术

什么是事务?

答:事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做。事务具有原子性、一致性、隔离性、持续性的四大特性,简称ACID特性。故障恢复可以保证事务的原子性和持续性。

故障的种类有哪些?‘

  1. 事务内部故障:如运算溢出、违反某些完整性约束而被终止等;(恢复操作:撤销)
  2. 系统故障:如CPU故障、操作系统故障、DBMS代码错误、断电等;(恢复操作:撤销和重做)
  3. 介质故障:如硬盘、磁盘损坏、瞬时强磁场干扰等;
  4. 计算机病毒;

有哪些恢复的实现技术?

答:恢复的基本原理就是冗余,就是建立冗余数据并利用它来恢复数据。建立冗余数据最常用技术就是数据转储和登记日志文件。

  1. 数据转储:数据库管理员定期将整个数据库复制到磁盘、磁带或其他存储介质上保存的过程。
    1. 静态转储:系统在无运行任何事务的时候进行的转储操作,优点是一定会得到数据一致性的副本,缺点是降低了数据库的可用性。
    2. 动态转储:转储期间允许对数据库进行存取或修改,但得到的后备副本不能保证正确有效,这要加上日志文件才能恢复到正确状态。
  2. 登记日志文件:日志文件用来记录事务对数据库的更新操作。
    1. 格式和内容:通常以记录为单位,一个记录包括事务的开始、事务的所有更新操作、事务的结束。
    2. 作用:进行事务故障恢复和系统故障恢复。
    3. 原则:登记的次序严格按并发事务的执行时间次序、必须先写日志后写数据库。

为什么登记日志要先写日志文件,后写数据库?

答:对数据库修改和把这个修改的日志记录写入日志文件是两个不同操作,如果在这两个操作中间出现错误,若是先修改数据库,而在运行记录中没有登记这个修改,就无法恢复这个修改了。若是先登记日志文件而没有修改数据库,按日志恢复时只不过多执行一遍不必要的undo而已。

数据库恢复策略有哪些?

  • 事务故障的恢复

事务故障是指事务运行至正常终点‘前被终止,这时恢复子系统应利用日志文件撤销此事务对已对数据库进行的修改。这种事故恢复由系统自动完成,下面是恢复步骤:

  1. 反向扫描日志文件,查找该事务的更新操作;
  2. 对该事务的更新操作进行逆操作;
  3. 继续反向扫描日志文件,重复步骤一和二,直至读到事务的开始标志。
  • 系统故障恢复

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

  1. 正向扫描日志文件,找出故障发生前已经提交的事务,将其事务标识记入重做队列,同时找出故障发生时未完成的事务,将其事务标识记入撤销队列。
  2. 对撤销队列做反向撤销处理。
  3. 对重做队列做正向重做处理。
  • 介质故障的恢复

发生介质故障后,磁盘上的物理数据和日志文件被破坏,这是最严重的一种故障,恢复方法是重装数据库,然后重做已完成的事务


具有检查点的恢复技术

出现原因:

  1. 搜索整个日志文件将会耗费大量时间;
  2. 很多需要重做的事务实际上已经将它们的更新结果写入了数据库,然而恢复系统又重复执行一遍。

本质:在日志文件内加入一类新记录——检查点记录,并增加一个重新开始文件。

数据库的恢复技术


数据库镜像

出现原因:应对介质故障,数据库的恢复不仅费时,而且数据库管理员还必须周期性地转储数据库,这会加重数据库管理员的负担。现在磁盘不仅便宜,而且容量大,所以许多数据库系统提供了数据库镜像,其可以自动将整个数据库或其中重要的数据复制到另一个磁盘,并且当主数据库更新时,其也会自动将更新的数据复制过去。

数据库的恢复技术

没有出现故障时

  1. 可用于并发操作
  2. 一个用户对数据加排他锁修改数据,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁