事务
- 一个数据库操作序列 ; 一个不可分割的工作单位; 恢复和并发控制的基本单位
- ACID
- 原子性 Atomicity
- 一致性 Consistency
- 一致性状态: 数据库中只包含成功事务提交的结果
- 独立性 Isolation
- 并发执行的各个事务之间不能互相干扰
- 持久性 Durability
- 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
故障
- 事务内部故障
- 系统故障
- 恢复策略:强行撤消(UNDO)所有未完成事务。重做(REDO)所有已提交的事务
- 介质故障
- 恢复策略:装入数据库发生介质故障前某个时刻的数据副本。重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库
- 计算机病毒
恢复
- 恢复操作的基本原理:冗余
- 建立冗余:
- 数据转储 backup
- 静态转储 与 动态转储(动态:允许转储时操作,后援副本 + 日志)
- 海量转储与增量转储
- 登录日志文件 logging
- 以以日志记录为单位:
- 内容包括:事务开始标记、事务结束标记、更新操作。
- 日志记录:事务标识、操作类型、操作对象、更新前的旧值、更新后的新值
- 登记日志的两条原则:登记的顺序严格按照事务执行的时间次序。 必须先写日志文件,后写数据库
- 以数据块为单位:
- 内容:事务标识、被更新的数据块
- 以以日志记录为单位:
- 数据转储 backup
恢复策略
- 事务内部故障:
- 反向扫描日志,查找该事务的更新操作
- 对该事务的更新操作执行逆操作,将日志记录中更新前的值写入数据库
- 反复执行,直到遇到开始标记
- 系统故障:
- Undo故障时未完成的事务
- Redo故障时已完成的事务
- :
- 正向扫描日志文件,建立Undo队列和Redo队列
- 反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作(更新前的值 写入数据库)
- 正向扫描日志文件,对每个REDO事务重新执行登记的操作(更新后的值 写入数据库)
- 介质故障
- 重装数据库
- 重做已完成的事务
具有检查点的恢复技术
- 解决 (改善恢复效率)
- 搜索整个日志将耗费大量的时间
- REDO处理:重新执行,浪费了大量时间
- 重新开始文件储存检查点记录在日志中的地址
- 检查点:
- 建立检查点时刻所有正在执行的事务清单
- 这些事务最近一个日志记录的地址
- 恢复子系统在登录日志文件期间动态地维护日志:周期性地建立检查点,保存数据库状态
- 将当前日志缓冲区中的所有日志记录写入磁盘上的日志文件中
- 在日志文件中写入一个检查点记录
- 将当前数据缓冲区中的所有数据记录写入磁盘的数据库中
- 把检查点记录在日志中的地址写入一个重新开始文件
- 恢复时:
- 检查点之前提交 无需Redo
- 检查点之后提交 Redo
- 故障之前未提交的 Undo
- 步骤:
- 从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录
- 由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。建立两个事务队列UNDO-LIST、REDO-LIST
- 把ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空。
- 从检查点开始正向扫描日志文件,直到日志文件结束
- 如有新开始的事务Ti,把Ti暂时放入UNDO-LIST队列
- 如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列
- 对UNDO-LIST中的每个事务执行UNDO操作,对REDO-LIST中的每个事务执行REDO操作。
本文详细介绍了数据库事务的概念及其特性(ACID),探讨了不同类型的故障及相应的恢复策略,并深入讲解了通过数据转储和日志记录来实现冗余的方法。此外,还讨论了检查点技术如何提高恢复效率。
1359

被折叠的 条评论
为什么被折叠?



