请使用支持现代 CSS 与 JavaScript 的浏览器播放课件
DBPA · 11.2

日志、检查点与数据库镜像

用副本、日志、检查点和镜像缩短恢复路径

VER. 2608.2 Built with impress.js

学习目标

完成本节后,你应该能够

  1. 01区分静态、动态、海量和增量转储
  2. 02说明日志记录的内容和先写日志原则
  3. 03按故障使用副本和日志恢复
  4. 04解释检查点和重新开始文件
  5. 05给定转储、检查点、故障时刻和介质可信性,选择副本、日志、UNDO、REDO 或镜像
  6. 06根据检查点构造初始恢复队列并比较数据库镜像的收益与代价
2/15
LEARNING OBJECTIVES

后备副本只能恢复到转储时刻

要恢复到故障前状态,还需要转储后的更新日志

后备副本、日志窗口和故障时刻之间的恢复证据链
Takeaway

转储副本 → 重装 → 日志中的已提交更新 → 故障前一致状态

Takeaway

不能。副本只提供恢复起点;动态转储或副本含未完成事务时,还要结合日志按状态执行 UNDO 和 REDO

3/15
BACKUP COPY

用两个维度区分转储方式

先判断转储时是否允许并发,再判断复制全部数据库还是只复制变化部分

海量转储增量转储
静态转储无并发写入,副本一致;复制全部数据库无并发写入;只复制变化部分
动态转储允许并发写入,需要日志校正全部副本允许并发写入;需要基础副本、变化链和日志窗口
Takeaway

静态/动态描述运行状态,海量/增量描述复制范围;两个维度可以自由组合

4/15
DUMP TYPES

日志记录事务对数据库的更新

日志让恢复系统知道应撤销哪些更新或重做哪些更新

日志信息说明恢复用途
事务标识哪个事务的操作分类事务状态
开始与结束BEGIN、COMMIT 或 ROLLBACK判断是否完成
操作对象插入、删除或修改对象定位更新
旧值与新值更新前后数据执行 UNDO 或 REDO

<T1, UPDATE, Account[A], old=100, new=90>

Takeaway

块级日志会保存受影响数据块的前后内容;插入或删除时旧值、新值可能有一侧为空,记录级日志更容易直接说明“哪个事务改了哪个对象”

5/15
LOG RECORD

先写日志后写数据页是可恢复性的底线

WAL 要求日志稳定后,相关数据页才可写入稳定存储

日志先写

日志已稳定保存而数据页尚未写入,恢复仍有依据;具体按事务状态执行 UNDO 或 REDO

数据先写

数据页已写而日志未稳定保存,故障后可能无法可靠解释该修改

Takeaway

不可以。WAL 先稳定保存恢复证据,再允许数据页落盘;提交确认还需要提交记录稳定保存

6/15
WRITE AHEAD LOG

按故障类型和事务状态选择恢复动作

副本提供起点,日志按事务状态补齐或撤销更新

事务状态队列动作
事务故障:未完成事务相关日志反向应用旧值执行 UNDO
系统故障:未完成/已提交事务UNDO-LIST/REDO-LIST未完成 UNDO,已提交 REDO
介质故障:原介质不可信可信副本与相关日志重装副本后按动态转储窗口和事务状态执行 UNDO/REDO
Takeaway

动态转储的介质恢复需要区分未完成事务和已提交事务;转储期间的未完成事务可能仍需 UNDO

7/15
FAILURE RECOVERY

检查点把恢复搜索起点移近故障位置

恢复不必每次从日志文件开头扫描

Takeaway

检查点不是单纯的时间标签,而是一组已按顺序落盘的恢复证据和一个可定位的日志地址

8/15
CHECKPOINT

检查点与重新开始文件定位恢复范围

检查点保存活动事务状态,重新开始文件保存日志地址

对象保存什么恢复时怎么用
检查点记录活动事务及最近日志地址建立初始事务队列
重新开始文件检查点在日志中的地址找到最后检查点
日志后续记录新事务和提交标记更新 UNDO/REDO 队列
Takeaway

从检查点向后扫描:新事务先进入 UNDO;遇到 COMMIT 后移入 REDO,扫描结束后先执行 UNDO,再执行 REDO

9/15
RESTART FILE

检查点与事务位置决定恢复动作

恢复动作要同时看事务提交时刻、最后检查点和故障位置

检查点前后五类事务的时间线和 UNDO REDO 分类

T1:检查点前提交

修改已在检查点建立前或建立时写入数据库,不必 REDO

T2、T4:检查点后提交

修改在故障时可能尚未落盘,需要 REDO

T3、T5:故障时未完成

事务未完成,必须撤销,需要 UNDO

Takeaway

不能。要从最后检查点正向扫描:新事务先进入 UNDO,遇到 COMMIT 后移入 REDO,最后先 UNDO 再 REDO

10/15
CHECKPOINT STRATEGY

镜像把当前关键数据复制到另一介质

介质故障时可以缩短停机和重装时间,但不提供历史版本

主数据库更新、镜像同步和介质故障后的服务切换

镜像解决什么问题

它把另一份当前数据放在不同介质上;镜像仍然一致且可用时,主介质损坏后可以继续服务,减少重装副本的停机时间

镜像不保存历史版本

镜像保存另一份当前数据,不保存多个历史时点。错误更新通常也会被复制,因此仍需后备副本和日志保留恢复时点;并发控制仍负责并发隔离

11/15
DATABASE MIRROR

镜像用复制写入成本换取可用性

通常只为关键数据和日志建立镜像

方面镜像收益镜像代价
介质故障可由另一介质继续服务需要额外存储
恢复速度减少重装和停机依赖镜像仍一致且可用
并发读取镜像可读且一致性策略允许时可分担读压力复制写入会增加开销,具体取决于同步方式
范围选择保护关键数据和日志全库镜像成本更高
Takeaway

不能。镜像解决当前数据的可用性和切换速度;历史恢复仍依赖后备副本与日志

12/15
MIRROR TRADEOFF

本节回顾

可靠恢复是一条由副本、日志、检查点和镜像组成的证据链

副本

副本提供可信的恢复起点

日志

日志按 WAL 记录更新前后状态,支撑 UNDO/REDO 队列

检查点

检查点记录恢复位置,缩短日志搜索范围

镜像

镜像在介质故障时减少停机

Takeaway

恢复链是:副本提供起点 → 日志补齐更新 → 检查点缩短搜索 → 镜像缩短停机;镜像不等于历史备份

13/15
RECAP

本节知识地图

14/15
KNOWLEDGE MAP

本节问题

  1. 01给定动态转储和故障时刻,如何选择副本以及相应日志?
  2. 02给定事务状态和介质可信性,如何在 UNDO、REDO、副本重装和镜像切换之间选择?
  3. 03数据页先写而日志未稳定保存时,故障后会留下什么恢复缺口?
  4. 04根据最后检查点和 T1—T5 状态,如何构造 UNDO-LIST 与 REDO-LIST?
  5. 05为什么动态转储的介质恢复可能同时需要 UNDO 和 REDO?
  6. 06镜像、后备副本和并发控制分别承担什么职责?
15/15
CHECK YOUR UNDERSTANDING