数据库系统(七)数据库事务处理技术


数据库事务处理技术-故障恢复课堂笔记

📌 本讲学习目标

  • 基本内容
    1. 数据库故障恢复的宏观思路
    2. 运行日志及检查点机制
    3. 三种日志类型(Undo/Redo/UndoRedo)
    4. 利用日志进行故障恢复的方法
  • 重点难点
    • 三种故障类型及其影响
    • 检查点与转储点的作用
    • 不同日志类型的记录规则和恢复策略
    • Undo/Redo结合型日志的灵活应用

⚠️ 数据库故障类型

三种核心故障及其影响

graph LR
A[数据库故障] --> B[事务故障]
A --> C[系统故障]
A --> D[介质故障]

B -->|原因| E[程序逻辑错误]
B -->|影响| F[单个事务]

C -->|原因| G[断电/非正常关机]
C -->|影响| H[内存数据及缓冲区]

D -->|原因| I[磁盘损坏]
D -->|影响| J[内存+磁盘全面损坏]

故障恢复目标

  • 原子性:故障事务的操作全做或全不做
  • 持久性:已提交事务影响永久保存
  • 将数据库恢复到已知正确状态

🧩 故障恢复宏观思路

核心恢复手段

故障类型恢复手段关键机制
事务故障Undo/Redo事务撤销与重做
系统故障运行日志检查点机制
介质故障副本备份转储点机制

存储体系与恢复

flowchart LR
    CPU --> 主存[易失性内存]
    主存 -->|DB Buffer| 磁盘[非易失性存储]
    磁盘 --> 日志文件
    磁盘 --> 数据库副本

缓冲区策略(Steal/No Force)

策略描述优势恢复需求
Steal允许未提交数据写盘灵活性高需要Undo
No Force不强制提交时写盘性能优化需要Redo

📜 运行日志基础

日志核心组件

graph LR
    A[事务操作] --> B[日志记录]
    B --> C[日志缓冲区]
    C --> D[日志文件]
    D --> E[故障恢复]

日志记录类型

记录类型格式描述
开始<START T>事务T开始
提交<COMMIT T>事务T成功提交
中止<ABORT T>事务T被中止
数据变更<T, X, v1>Undo型(旧值)
<T, X, v2>Redo型(新值)
<T, X, v1, v2>UndoRedo型(新旧值)

↩️ Undo型日志及恢复

记录规则

  1. <T, X, 旧值>到日志
  2. 执行OUTPUT(X)
  3. <COMMIT T>

    核心原则:数据写盘后才能提交

恢复流程

flowchart TB
    A[扫描日志] --> B{事务状态}
    B -->|未提交| C[反向扫描]
    C --> D[写回旧值]
    B -->|已提交| E[跳过]

故障场景示例

故障点磁盘状态恢复操作
Commit前A=16, B=8写回A=8, B=8
Commit后A=16, B=16无操作

🔁 Redo型日志及恢复

记录规则

  1. <T, X, 新值>到日志
  2. <COMMIT T>
  3. 执行OUTPUT(X)

    核心原则:提交后才能写盘

恢复流程

flowchart LR
    A[正向扫描日志] --> B{事务状态}
    B -->|已提交| C[写回新值]
    B -->|未提交| D[跳过]

故障场景示例

故障点磁盘状态恢复操作
Commit前A=8, B=8无操作
Commit后A=16, B=8写回A=16, B=16

🔄 Undo/Redo结合型日志

记录规则

  1. <T, X, 旧值, 新值>到日志
  2. 可任意顺序执行:
    • <COMMIT T>
    • OUTPUT(X)

      核心优势:灵活平衡性能与安全性

恢复流程(双向操作)

flowchart LR
    A[确定事务状态] --> B{未提交事务}
    A --> C{已提交事务}
    B --> D[反向扫描写旧值]
    C --> E[正向扫描写新值]

典型场景

操作序列恢复动作
<T,X,8,16> → 故障写回X=8
<COMMIT T> → 故障写回X=16

⏱️ 检查点技术

两种检查点类型

类型过程优势
静止检查点1. 暂停新事务
2. 等待活跃事务结束
3. 写<CKPT>
恢复简单
非静止检查点1. 写<START CKPT(T1..Tk)>
2. 继续运行
3. 活跃事务结束后写<END CKPT>
不影响系统运行

检查点恢复范围

flowchart LR
    A[找到最近END CKPT] --> B[确定活跃事务]
    B --> C[从最早活跃事务开始恢复]
    C --> D[忽略更早提交的事务]

💎 总结回顾

关键恢复技术对比

日志类型记录内容OUTPUT时机适用场景
Undo旧值提交前需频繁撤销
Redo新值提交后需保证持久性
UndoRedo新旧值灵活通用场景

故障恢复全景

flowchart TD
    A[故障发生] --> B{故障类型}
    B -->|事务故障| C[Undo/Redo]
    B -->|系统故障| D[日志+检查点]
    B -->|介质故障| E[副本+日志]
    C --> F[恢复完成]
    D --> F
    E --> F

核心要点:通过日志机制和检查点技术,结合不同恢复策略,DBMS能够在各种故障场景下保证数据的一致性和持久性。


文章作者: nusqx
文章链接: https://nusqx.top
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 nusqx !
评论
  目录