第19章 恢复系统
依据原书第7版完整目录覆盖11个节点:用日志先行、检查点、重做与撤销把不同故障恢复到一致状态
第19章 恢复系统
本课程对应Abraham Silberschatz、Henry F. Korth、S. 在“第19章 恢复系统”的证据链中,Sudarshan著,杨冬青、李红燕、张金波等译《数据库系统概念(原书第7版)》,机械工业出版社2021年6月出版,820页,ISBN 9787111681816。原版第7版由McGraw-Hill于2019年发布。课程按原书11部分、32章与附录A逐项重构,不复制原文。
中文版第7版纸书正文收录第1-23章;第24-26章由中文版提供中文在线内容;第27-32章是原版官网英文在线章节;附录A在纸书中。本页媒介为“纸书正文”。 全课程另设学习地图与总复习,共35页;正式知识分母仍是32章与附录A。本页属于“第七部分 事务管理”,依据正式目录覆盖11个节点。
“第19章 恢复系统”没有使用未获授权的中文纸书正文;以 作者官网第 7 版完整目录 界定 32 章与附录 A,以 作者公开在线章节、大学模式实验 和 McGraw-Hill 第 7 版变更说明 核对可公开内容。中文解释、SQL、图示、实验与练习均为独立教学重写;实现行为再以 PostgreSQL 官方文档 等一手规范复核。
学习目标
- 能解释“第19章 恢复系统”的11个正式节点,并把它们连接到“用日志先行、检查点、重做与撤销把不同故障恢复到一致状态”主线。
- 能复现WAL时间线、崩溃注入脚本、ARIES三阶段轨迹和恢复点报告,记录输入版本、配置、预期、实际结果与失败边界。
- 能比较至少两种实现或故障条件,证明“数据页落盘前对应日志已持久,恢复重复执行安全,已提交与未提交事务被正确区分”。
- 能设计反例推翻“把备份当作即时恢复,或只验证正常关机而不在日志与数据页不同落盘点崩溃”,并给出修复、回退和独立验收条件。
从一次可观察状态变化开始
先预测:给定一份固定的大学数据库、一个操作和一个故障时刻,哪些逻辑行、物理页、锁、版本或日志记录应该变化,哪些绝不能变化?不要先运行再解释。把预测写成状态表,然后用独立查询、执行统计、页或日志轨迹核对。若预测与观察不一致,先检查模型和实验边界,而不是立即改配置。
本页主问题是“用日志先行、检查点、重做与撤销把不同故障恢复到一致状态”。交付不以读完为准,而以另一位学习者能从WAL时间线、崩溃注入脚本、ARIES三阶段轨迹和恢复点报告复现同一结论为准。最小正确性合同是:数据页落盘前对应日志已持久,恢复重复执行安全,已提交与未提交事务被正确区分。
核心词汇与系统边界
↡预写日志是“用日志先行、检查点、重做与撤销把不同故障恢复到一致状态”中的第1个核心概念;必须由状态、机制、反例和证据共同定义、↡检查点是“用日志先行、检查点、重做与撤销把不同故障恢复到一致状态”中的第2个核心概念;必须由状态、机制、反例和证据共同定义、↡重做是“用日志先行、检查点、重做与撤销把不同故障恢复到一致状态”中的第3个核心概念;必须由状态、机制、反例和证据共同定义、↡撤销是“用日志先行、检查点、重做与撤销把不同故障恢复到一致状态”中的第4个核心概念;必须由状态、机制、反例和证据共同定义、↡ARIES是“用日志先行、检查点、重做与撤销把不同故障恢复到一致状态”中的第5个核心概念;必须由状态、机制、反例和证据共同定义 构成本页词汇表。每个词都要回答四个问题:它约束什么状态,由哪个模块执行,在哪个故障或并发边界会失效,用什么证据发现失效。只给一句名词解释不构成掌握。
先写日志再写数据:崩溃后按日志重做已提交、撤销未提交,持久性由此保证。
第七版机制逐项深读
19.1 故障分类
在“第19章 恢复系统”中,“19.1 故障分类”的备份可用性必须通过实际恢复证明;复制同一逻辑错误不等于形成独立恢复点。
19.2 存储
在“第19章 恢复系统”中,围绕“19.2 存储”比较两种实现时,共用同一结果合同与数据快照,并报告估计、实际与资源边界。
19.3 恢复与原子性
在“第19章 恢复系统”中,验证“19.3 恢复与原子性”固定两笔事务,只改变交错点,记录可见版本、提交结果、冲突边和最终余额对账。
19.4 恢复算法
在“第19章 恢复系统”中,“19.4 恢复算法”的备份可用性必须通过实际恢复证明;复制同一逻辑错误不等于形成独立恢复点。
19.5 缓冲区管理
在“第19章 恢复系统”中,“19.5 缓冲区管理”定义元组如何编码、定位和缓存;页布局、空闲空间、淘汰与脏页刷写共同决定 I/O 和崩溃边界。
19.6 非易失存储丢失故障
在“第19章 恢复系统”中,“19.6 非易失存储丢失故障”从最近持久点按日志决定 REDO 与 UNDO;写前日志要求相关日志先于脏数据页到达稳定存储。
19.7 使用远程备份系统实现高可用
在“第19章 恢复系统”中,“19.7 使用远程备份系统实现高可用”从最近持久点按日志决定 REDO 与 UNDO;写前日志要求相关日志先于脏数据页到达稳定存储。
19.8 提前释放锁与逻辑撤销
在“第19章 恢复系统”中,“19.8 提前释放锁与逻辑撤销”决定并发操作何时等待、失败或读取旧版本;正确性由允许的调度集合而非吞吐单独定义。
19.9 ARIES
在“第19章 恢复系统”中,分析“19.9 ARIES”要区分事务表、脏页表、检查点和日志序号,不能只看重启后的最终页面。
19.10 内存数据库恢复
在“第19章 恢复系统”中,“19.10 内存数据库恢复”定义元组如何编码、定位和缓存;页布局、空闲空间、淘汰与脏页刷写共同决定 I/O 和崩溃边界。
19.11 小结
在“第19章 恢复系统”中,“19.11 小结”组织“依据原书第7版完整目录覆盖11个节点:用日志先行、检查点、重做与撤销把不同故障恢复到一致状态”的语义、结构、执行和证据;若不能给出一个状态变化与独立对账,本节点仍未完成。
机制推演:从语义到物理证据
预写日志先持久化变更记录再允许脏页落盘。恢复分析阶段重建事务表与脏页表,重做阶段重复历史,撤销阶段沿日志链补偿未完成事务;幂等重做和补偿日志使恢复本身可再次崩溃。
推演时始终区分五层。在“第19章 恢复系统”的证据链中,第一层是业务不变量,说明哪些数据库状态合法;第二层是逻辑模型与查询语义,说明结果应该是什么;第三层是物理计划和数据结构,说明系统怎样得到结果;第四层是并发、日志与复制协议,说明交错和故障后仍保留哪些承诺;第五层是观测证据,说明我们怎样知道前四层真的成立。性能优化只能改变第三层和部分第四层的实现,不能悄悄改变前两层。
对每个节点建立因果链:输入版本与配置 → 操作或调度 → 中间状态 → 可观察输出 → 独立对账。在“第19章 恢复系统”的证据链中,若结论涉及性能,报告中位数、尾延迟、吞吐、I/O和等待,而不是只截一条最快记录;若涉及正确性,至少准备一个应成功样本和一个应失败样本,并记录错误类别或恢复终点。
证据解释与交接
语义证据证明结果定义没有漂移。保存关系模式、约束、查询文本、参数、隔离级别和预期行集;涉及NULL、重复、顺序或聚集时,单独列出处理规则。任何实现比较都必须共享同一语义合同。
执行证据证明机制判断可以复核。保存计划、实际行数、缓冲命中、I/O、锁或版本、日志位置和错误状态中与本章相关的部分。计划估计与实际偏差本身就是结果,不应通过只截取计划名称隐藏。
失败证据证明边界真实存在。每次只注入一个变量:空输入、重复键、倾斜、并发冲突、进程崩溃、存储丢失或网络分区。明确失败前最后一个持久状态、恢复后第一个可用状态,以及是否需要人工介入。
交接证据让另一位学习者无需口头补充就能复现。最少包括版本卡、大学模式加载与重置脚本、预测表、WAL时间线、崩溃注入脚本、ARIES三阶段轨迹和恢复点报告、正常与失败轨迹、独立对账、已知限制和回退条件。若更换DBMS或版本,先重跑基线再比较。
本章回顾
重新完成“用日志先行、检查点、重做与撤销把不同故障恢复到一致状态”:先声明不变量和输入版本,按11个目录节点建立模型,手算正常路径,注入一个边界或故障,收集语义与执行证据,最后由独立查询对账。最终交付WAL时间线、崩溃注入脚本、ARIES三阶段轨迹和恢复点报告,并能证明“数据页落盘前对应日志已持久,恢复重复执行安全,已提交与未提交事务被正确区分”。
小结
- 日志先行是恢复的基石
- 检查点控制恢复工作量
- 重做前滚,撤销回滚
- 崩溃恢复回到一致状态
- ARIES 是工业级恢复范式
复习与独立验收
练习
问题 1:为什么“第19章 恢复系统”必须覆盖11个目录节点?
问题 2:本页最小正确性合同是什么?
问题 3:怎样构造能推翻常见错误的最小反例?
问题 4:为什么执行成功不能证明数据库设计正确?
问题 5:性能结论至少需要哪些数据?
问题 6:独立交接至少包含什么?
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 预写日志
预写日志在本页中以“数据页落盘前对应日志已持久,恢复重复执行安全,已提交与未提交事务被正确区分”为正确性边界,并由可重放实验验证。
- 检查点
检查点在本页中以“数据页落盘前对应日志已持久,恢复重复执行安全,已提交与未提交事务被正确区分”为正确性边界,并由可重放实验验证。
- 重做
重做在本页中以“数据页落盘前对应日志已持久,恢复重复执行安全,已提交与未提交事务被正确区分”为正确性边界,并由可重放实验验证。
- 撤销
撤销在本页中以“数据页落盘前对应日志已持久,恢复重复执行安全,已提交与未提交事务被正确区分”为正确性边界,并由可重放实验验证。
- ARIES
ARIES在本页中以“数据页落盘前对应日志已持久,恢复重复执行安全,已提交与未提交事务被正确区分”为正确性边界,并由可重放实验验证。