Skip to content

数据库系统概念 - 恢复技术

本节内容

数据库的恢复技术

事务

事务:访问并可能更新各种数据项的一个程序执行单元。

事务的ACID特性

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持续性(Durability )

数据库的故障

数据库恢复:把数据库从错误状态恢复到某一已知的正确状态。

事务故障

事务在运行至正常终止点前被终止。分为预期、非预期。

恢复撤销事务(UNDO)

系统故障

称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动。

  • 整个系统的正常运行突然被破坏
  • 所有正在运行的事务都非正常终止
  • 不破坏数据库
  • 内存中数据库缓冲区的信息全部丢失

常见原因:系统断电、硬件错误

恢复

  • 事务未提交:强行撤销(UNDO)所有未完成的事务
  • 事务已提交,但缓冲区中的信息尚未完全写回到磁盘上:重做(REDO)所有已提交的事务

介质故障

称为硬故障,指外存故障

恢复装入故障前的某时刻的数据副本重做此时刻到当前所有成功的事务,将这些事务已提交的结果重新记入数据库。

各类故障对数据库的影响:数据库本身被破坏;或数据库没有被破坏,但数据可能不正确。

数据库恢复的实现技术

基本原理:冗余

  • 数据转储(备份,backup)
  • 登记日志文件(logging)

数据转储(备份)

转储(备份):DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程。

  • 静态转储:系统无运行事务时进行的转储操作。转储开始时数据库处于一致性状态,转储期间不允许数据库的存取、修改。
  • 动态转储:允许与用户事务并发进行。优点是不需等待正在运行的用户事务结束,不影响新事务的运行;缺点是不能保证一致性。需要将动态转储期间的活动记录记录下来,建立日志文件。
  • 海量转储(全量备份):每次转储全部数据库。
  • 增量转储:只转储上次转储后更新的数据。

登记日志文件

日志文件:记录事务对数据库的更新操作的文件。

格式:以记录为单位的日志文件日志;以数据块为单位的日志文件。

以记录为单位的日志文件内容:

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

以记录为单位的日志文件,每条日志记录内容包括:

  • 事务标识
  • 操作类型(更、删、改)
  • 操作对象(记录内部标识)
  • 更新前的数据的旧值(插入时为空值)
  • 更新后的数据的新值(删除时为空值)

日志记录基本原则

  • 登记次序严格按照事务执行时间次序
  • 先写日志,再写数据库(原因:两个操作是不同的操作,且之间可能会发生故障)

image-20210703093137495

上图中:

  • 系统在Ta时刻停止运行事务,进行数据库转储
  • 在Tb时刻转储完毕,得到Tb时刻的数据库一致性副本
  • 系统运行到Tf时刻发生故障
  • 为恢复数据库,首先由DBA重装数据库后备副本,将数据库恢复至Tb时刻的状态
  • 重新运行自Tb~Tf时刻的所有更新事务,把数据库恢复到故障发生前的一致状态

数据库恢复的步骤

1 进行事务故障恢复

方法撤销(UNDO)事务对数据库的修改。

时机:由系统自动完成,对用户透明,无需用户干预。

流程反向扫描日志文件,查找事务的更新操作,对更新操作执行逆操作,直至回到事务开始的状态。

2 进行系统故障恢复

原因:未完成的事务对数据库的更新已经写入数据库(缓冲区满);已提交的事务对数据库更新还留在缓冲区,没来的及写入数据库。

方法UNDO——故障发生时没完成的事务,REDO——已完成的事务(不论是否写入)。

时机:在系统重启时自动完成,不需用户干预。

流程正向扫描日志文件,建立UNDO队列(故障发生时没完成的事务)和REDO队列(已完成的事务),UNDO队列事务反向扫描log,执行逆操作,REDO队列事务正向扫描log,重新执行操作。

3 协助后备副本进行介质故障恢复

方法:装入备份文件,装入日志文件副本。

时机:需要DBA的介入。

流程装入最新的后备数据库副本,使数据库恢复到最近一次的备份;装载转储结束时的日志文件,重做已完成的事务。

具有检查点的恢复技术

目的:减少搜索整个日志文件的代价

检查点技术

检查点记录的内容

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

重新开始文件”:§记录各个检查点记录日志文件中的地址

image-20210703094036279

动态维护日志文件的方法:周期性地建立检查点保存数据库状态
当前日志缓冲区写磁盘,新建检查点记录数据缓冲区写磁盘,检查点记录在日志文件中的地址写入重新开始文件

改善效率:若事务在检查点前提交,其修改一定会写入数据库。恢复处理时不需要处理该事务。

系统出现故障时,恢复子系统将根据事务的不同状态采取不同的恢复策略:

image-20210703094312234

恢复策略

UNDO队列和REDO队列

新开始的UNDO,已提交的REDO

数据库镜像

DBMS自动把整个数据库或其中的关键数据复制到另一个磁盘上,提高数据库的可用性。

image-20210703094411709

出现介质故障时,可由镜像磁盘继续提供使用。同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。

image-20210703094456193

About this Post

This post is written by Holger, licensed under CC BY-NC 4.0.

#考试不挂科 #课堂 #学习笔记 #DB