本节内容
数据库的恢复技术
事务
事务:访问并可能更新各种数据项的一个程序执行单元。
事务的ACID特性:
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持续性(Durability )
数据库的故障
数据库恢复:把数据库从错误状态恢复到某一已知的正确状态。
事务故障
事务在运行至正常终止点前被终止。分为预期、非预期。
恢复:撤销事务(UNDO)
系统故障
称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动。
- 整个系统的正常运行突然被破坏
- 所有正在运行的事务都非正常终止
- 不破坏数据库
- 内存中数据库缓冲区的信息全部丢失
常见原因:系统断电、硬件错误
恢复:
- 事务未提交:强行撤销(UNDO)所有未完成的事务
- 事务已提交,但缓冲区中的信息尚未完全写回到磁盘上:重做(REDO)所有已提交的事务
介质故障
称为硬故障,指外存故障。
恢复:装入故障前的某时刻的数据副本,重做此时刻到当前所有成功的事务,将这些事务已提交的结果重新记入数据库。
各类故障对数据库的影响:数据库本身被破坏;或数据库没有被破坏,但数据可能不正确。
数据库恢复的实现技术
基本原理:冗余
- 数据转储(备份,backup)
- 登记日志文件(logging)
数据转储(备份)
转储(备份):DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程。
- 静态转储:系统无运行事务时进行的转储操作。转储开始时数据库处于一致性状态,转储期间不允许数据库的存取、修改。
- 动态转储:允许与用户事务并发进行。优点是不需等待正在运行的用户事务结束,不影响新事务的运行;缺点是不能保证一致性。需要将动态转储期间的活动记录记录下来,建立日志文件。
- 海量转储(全量备份):每次转储全部数据库。
- 增量转储:只转储上次转储后更新的数据。
登记日志文件
日志文件:记录事务对数据库的更新操作的文件。
格式:以记录为单位的日志文件日志;以数据块为单位的日志文件。
以记录为单位的日志文件内容:
- 各个事务的开始标志 BEGIN TRANSACTION
- 各个事务的结束标记 COMMIT 或 ROLLBACK
- 各个日志的所有更新操作
以记录为单位的日志文件,每条日志记录内容包括:
- 事务标识
- 操作类型(更、删、改)
- 操作对象(记录内部标识)
- 更新前的数据的旧值(插入时为空值)
- 更新后的数据的新值(删除时为空值)
日志记录基本原则:
- 登记次序严格按照事务执行时间次序
- 先写日志,再写数据库(原因:两个操作是不同的操作,且之间可能会发生故障)
上图中:
- 系统在Ta时刻停止运行事务,进行数据库转储
- 在Tb时刻转储完毕,得到Tb时刻的数据库一致性副本
- 系统运行到Tf时刻发生故障
- 为恢复数据库,首先由DBA重装数据库后备副本,将数据库恢复至Tb时刻的状态
- 重新运行自Tb~Tf时刻的所有更新事务,把数据库恢复到故障发生前的一致状态
数据库恢复的步骤
1 进行事务故障恢复
方法:撤销(UNDO)事务对数据库的修改。
时机:由系统自动完成,对用户透明,无需用户干预。
流程:反向扫描日志文件,查找事务的更新操作,对更新操作执行逆操作,直至回到事务开始的状态。
2 进行系统故障恢复
原因:未完成的事务对数据库的更新已经写入数据库(缓冲区满);已提交的事务对数据库更新还留在缓冲区,没来的及写入数据库。
方法:UNDO——故障发生时没完成的事务,REDO——已完成的事务(不论是否写入)。
时机:在系统重启时自动完成,不需用户干预。
流程:正向扫描日志文件,建立UNDO队列(故障发生时没完成的事务)和REDO队列(已完成的事务),UNDO队列事务反向扫描log,执行逆操作,REDO队列事务正向扫描log,重新执行操作。
3 协助后备副本进行介质故障恢复
方法:装入备份文件,装入日志文件副本。
时机:需要DBA的介入。
流程:装入最新的后备数据库副本,使数据库恢复到最近一次的备份;装载转储结束时的日志文件,重做已完成的事务。
具有检查点的恢复技术
目的:减少搜索整个日志文件的代价
检查点技术
检查点记录的内容:
- 建立检查点的时刻所有正在执行的事务清单
- 这些事务最近一个日志记录的地址
“重新开始文件”:§记录各个检查点记录在日志文件中的地址
动态维护日志文件的方法:周期性地建立检查点、保存数据库状态。
当前日志缓冲区写磁盘,新建检查点记录,数据缓冲区写磁盘,检查点记录在日志文件中的地址写入重新开始文件。
改善效率:若事务在检查点前提交,其修改一定会写入数据库。恢复处理时不需要处理该事务。
系统出现故障时,恢复子系统将根据事务的不同状态采取不同的恢复策略:
恢复策略
UNDO队列和REDO队列
新开始的UNDO,已提交的REDO
数据库镜像
DBMS自动把整个数据库或其中的关键数据复制到另一个磁盘上,提高数据库的可用性。
出现介质故障时,可由镜像磁盘继续提供使用。同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。
About this Post
This post is written by Holger, licensed under CC BY-NC 4.0.