[DB] 数据库恢复技术

数据库恢复技术

事务

在讨论数据库恢复计数之前先要明确事务的基本概念和事务的性质。

事务:用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。在SQL中,定义事务的语句有3条:

BEGIN TRANSACTION

COMMIT

ROLLBACK

特性:ACID——原子性Atomisticy、一致性Consistency、隔离性Isolation、持续性Durability。

故障的种类

  • 事务内部的故障:事务没有打到预期的终点(COMMIT或者显示的ROLLBACK),因此,数据可可能出于不正确的状态。事务内部更多的故障是非预期的,是不能由应用程序处理的。

  • 系统故障:系统故障是指造成系统停止运转的任何时间,是的系统要重新启动。如:CPU故障、操作系统故障、DBMS代码错误、系统断电等。发生系统故障时,一些尚未完成的事务结果可能已送入物理数据库,从而造成数据库可能出于不正确的状态。

    恢复子系统必须在系统重新启动时让所有非正常中值的事务回滚,还需要重做REDO所有已提交的事务,以将数据库真正恢复到一致状态。

  • 介质故障:系统故障常被成为软故障(soft crash) ,介质故障成为硬故障(hard crash) 。硬故障指外存故障,如磁盘损坏、磁头碰撞、瞬时强磁场干扰等。发生几率小,但破坏性巨大。

  • 计算机病毒

恢复的基本原理:冗余。也就是说数据库中任何一部分被破坏或不正确的数据可与根据存储在系统别处的冗余数据来重建。

恢复的实现技术

恢复机制关键问题:如何建立冗余数据,如何利用这些冗余数据实施数据库恢复。

建立冗余数据最常用的技术时数据转储登记日志文件logging(通常二法并用)。

数据转储

转储即数据库管理员定期地将整个数据库复制到磁盘、磁带或其他存储介质上保存起来的过程。这些备用数据成为后备副本backup。转储是十分耗费时间和资源的,不能频繁进行,应根据数据库使用情况确定一个适当的转储周期。

  • 静态转储:系统中午运行事务时进行的转储操作。 即转储操作开始的时刻,数据库出游一致性状态,而转储期间不允许对数据库的任何存取、修改活动。缺点:降低数据库的可用性。

  • 动态转储:转储期间允许对数据库进行存取或修改。缺点:转储结束时backup上的数据并不能保证正确有效,可能已经是过时的数据了。

    解决方法:将转储期间各事务对数据库的修改活动登记下来,建立日志文件log file

    转储还分为海量转储增量转储两种方式。

    • 海量转储:每次转储全部数据库
    • 增量转储:每次只转储上一次转储后更新过的数据。

登记日志文件Logging

日志文件的格式和内容

日志文件:用来记录事务对数据库的更新操作的文件。分为已记录为单位的日志文件以数据块为单位的日志文件

日志文件中需要登记的内容:

  • 各个事务的开始(BEGIN TRANSACTION)标记
  • 各个事务的结束(COMMIT或ROLLBACK)标记
  • 各个事务的所有更新操作

日志文件的作用:

  • 事务故障恢复和系统故障恢复必须用日志文件
  • 在动态转储方式中必须建立日志文件,backup和log file结合起来才能有效地恢复数据库
  • 静态转储方式中也可以建立日志文件,主要用于数据库恢复后将已完成地事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理

为保证数据库是可恢复的,登记日志文件时必须遵循两条原则:

  • 登记的次序严格按并发事务执行的时间次序
  • 必须先写日志文件,然后再写数据库。

恢复策略

事务故障的恢复 :事务在运行至正常终止点前被终止,恢复子系统应利用日志文件撤销UNDO此事务一堆数据库进行的修改。由系统自动完成 ,对用户是透明的,步骤为:

  • 反向扫描日志文件,查找该事物的更新操作。
  • 对该事物的更新操作执行逆操作
  • 继续反向扫描日志文件,查该事务的其他操作,并作同样处理。
  • repeat until begining

系统故障的恢复 ,成因有两个:1.未完成事务对数据库的更新已写入数据库;2.已提交事务对数据库的更新还留在缓冲区。该恢复由系统在重新启动时自动完成,不需要用户干预。

恢复步骤:

  • 正向扫描日志文件,找出在故障发生前已经提交的事务(有BEGIN TRANSACTIONCOMMIT),标记记入重做队列(REDO LIST),同时找出故障发生时尚未完成的事务(只有BEGIN TRANSACTIONCOMMIT),标记记入撤销队列(UNDO LIST)
  • 对UNDO LIST中的各个事务UNDO——反向扫描日志文件,对每个要撤销事务的更新操作执行逆操作。
  • 对REDO-LIST进行REDO——正向扫描日志文件,依次REDO。

介质故障的恢复 ,恢复方法:重装数据库,重做已完成的事务。(装入最新backup,装入相应的日志文件副本)

具有检查点的恢复技术

在日志文件中增加一个新的记录——检查点checkpoint记录,增加一个重新开始文件,并让恢复子系统在登录日志文件期间动态地维护日志。

checkpoints记录内容:

  • 建立检查点时刻所有正在执行的事务清单
  • 这些事务最近一个日志记录的地址

动态维护日志文件的方法是,周期性地执行建立检查点、保存数据库状态地操作。

使用检查点方法可以改善恢复效率。