数据库概-复习总结(4)

本文详细介绍了数据库事务的概念及其特性(ACID),探讨了不同类型的故障及相应的恢复策略,并深入讲解了通过数据转储和日志记录来实现冗余的方法。此外,还讨论了检查点技术如何提高恢复效率。

事务

  • 一个数据库操作序列 ; 一个不可分割的工作单位; 恢复和并发控制的基本单位
  • ACID
    • 原子性 Atomicity
    • 一致性 Consistency
      • 一致性状态: 数据库中只包含成功事务提交的结果
    • 独立性 Isolation
      • 并发执行的各个事务之间不能互相干扰
    • 持久性 Durability
      • 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

故障

  • 事务内部故障
  • 系统故障
    • 恢复策略:强行撤消(UNDO)所有未完成事务。重做(REDO)所有已提交的事务
  • 介质故障
    • 恢复策略:装入数据库发生介质故障前某个时刻的数据副本。重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库
  • 计算机病毒

恢复

  • 恢复操作的基本原理:冗余
  • 建立冗余:
    • 数据转储 backup
      • 静态转储 与 动态转储(动态:允许转储时操作,后援副本 + 日志
      • 海量转储与增量转储
    • 登录日志文件 logging
      • 以以日志记录为单位:
        • 内容包括:事务开始标记、事务结束标记、更新操作
        • 日志记录:事务标识、操作类型、操作对象、更新前的旧值、更新后的新值
        • 登记日志的两条原则:登记的顺序严格按照事务执行的时间次序。 必须先写日志文件,后写数据库
      • 以数据块为单位:
        • 内容:事务标识、被更新的数据块

恢复策略

  • 事务内部故障:
    • 反向扫描日志,查找该事务的更新操作
    • 对该事务的更新操作执行逆操作,将日志记录中更新前的值写入数据库
    • 反复执行,直到遇到开始标记
  • 系统故障:
    • Undo故障时未完成的事务
    • Redo故障时已完成的事务
    • 正向扫描日志文件,建立Undo队列和Redo队列
    • 反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作(更新前的值 写入数据库)
    • 正向扫描日志文件,对每个REDO事务重新执行登记的操作(更新后的值 写入数据库)
  • 介质故障
    • 重装数据库
    • 重做已完成的事务
具有检查点的恢复技术
  • 解决 (改善恢复效率
    • 搜索整个日志将耗费大量的时间
    • REDO处理:重新执行,浪费了大量时间
  • 重新开始文件储存检查点记录在日志中的地址
  • 检查点
    • 建立检查点时刻所有正在执行的事务清单
    • 这些事务最近一个日志记录的地址
  • 恢复子系统在登录日志文件期间动态地维护日志:周期性地建立检查点,保存数据库状态
    1. 将当前日志缓冲区中的所有日志记录写入磁盘上的日志文件中
    2. 在日志文件中写入一个检查点记录
    3. 将当前数据缓冲区中的所有数据记录写入磁盘的数据库中
    4. 把检查点记录在日志中的地址写入一个重新开始文件
  • 恢复时:
    • 检查点之前提交 无需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操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绫零依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值