你的浏览器不支持本网站所要求的功能, 现在看到的是本网站简化版本.

为了获得最佳体验, 请使用最新的Chrome, Safari, Firefox 或 Edge 浏览器.

11. 数据库恢复技术

Powered by impress.js
Ver. 2508

### 主要内容 - 事务的基本概念 - 数据库恢复概述 - 故障的种类 - 恢复的实现技术 - 恢复策略 - 具有检查点的恢复技术 - 数据库镜像
### 事务的基本概念 - 用户定义的一个数据库操作序列 - 不可分割的工作单位 - 要么全做, 要么全不做 (All or nothing) - SQL 语句: - `BEGIN TRANSACTION`: 事务开始 - `COMMIT`: 提交, 将所有更新写入物理数据库 - `ROLLBACK`: 回滚, 撤销已完成的操作, 回复到开始状态
### 事务的 ACID 特性 - 原子性 (Atomicity): 事务是逻辑工作单位, 操作要么全做, 要么全不做 - 一致性 (Consistency): 执行结果必须使数据库从一个一致性状态变到另一个一致性状态 - 隔离性 (Isolation): 一个事务的执行不能被其他事务干扰 - 持续性 (Durability): 事务一旦提交, 对数据的改变是永久性的
### 转账示例 - 场景: 从账号 A 取出一万元存入账号 B - 一致性破坏 (Consistency Violation): - 操作 1: A 减去一万元 (完成) - 故障发生 - 操作 2: B 加入一万元 (未完成) - 结果: 数据库处于不一致状态 (Inconsistent State) - 结论: 一致性与原子性密切相关
### 数据库恢复 - 把数据库从错误状态恢复到某一已知的正确状态 - 涉及系统可靠性 (System Reliability) - 涉及系统运行效率 (System Efficiency) - 恢复子系统是 DBMS 的重要组成部分, 占代码量 10% 以上
### 事务内部的故障 - 逻辑错误, 运算溢出, 死锁 (Deadlock), 违反完整性约束 - 部分可由程序发现, 大多是非预期的 - 处理: 事务撤销 (UNDO)
### 系统故障 - 软故障 - CPU 故障, 断电. 缓冲区内容丢失 - 处理: 撤销 (UNDO) 未完成事务, 重做 (REDO) 已提交事务
### 介质故障 - 硬故障 - 磁盘损坏, 磁头碰撞, 强磁场干扰 - 破坏全部或部分数据库 - 发生概率小, 但破坏性最大 - 处理: 重装数据库副本 + 重做事务
### 恢复的实现技术 - 核心原理: 建立冗余数据 - 数据转储 (Data Dumping) - 登记日志文件 (Logging)
### 数据转储 - DBA 定期将整个数据库复制到存储介质 - 后备副本: 转储产生的数据副本 - 恢复过程: - 1. 重装后备副本 - 2. 重新运行自转储后的所有更新事务
### 按状态分 - 静态转储 (Static Dumping): 无运行事务时进行, 保证一致性, 但降低可用性 - 动态转储 (Dynamic Dumping): 允许并发操作, 需配合日志文件使用, 因为副本可能不一致
### 按数量分 - 海量转储 (Full Dumping): 转储全部数据库 - 增量转储 (Incremental Dumping): 只转储更新过的数据
### 登记日志文件 - 记录事务对数据库的更新操作 - 以记录为单位: 记录事务标识, 操作类型, 对象, 旧值, 新值 - 以数据块为单位: 记录受影响的整个数据块 - 处理事务故障 & 系统故障 - 协助动态转储恢复
### 先写日志文件原则 - 先写日志文件, 后写数据库 - 两个写操作之间可能发生故障 - 若先写数据库未写日志: 无法恢复 (无法撤销) - 若先写日志未写数据库: 只需多执行一次 UNDO, 不影响正确性 - 是保证数据库可恢复性的关键原则
### 事务故障恢复: - 操作: 撤销 (UNDO) - 步骤: 反向扫描日志 -\> 对更新操作执行逆操作 -\> 直至事务开始标记
### 系统故障恢复 - 操作: 撤销 (UNDO) 未完成事务, 重做 (REDO) 已提交事务 - 1. 正向扫描建立 UNDO-LIST 和 REDO-LIST - 2. 对 UNDO-LIST 执行撤销 - 3. 对 REDO-LIST 执行重做
### 介质故障的恢复 - 1. 重装副本: 装入最新的数据库后备副本 - 2. 重做事务: 装入相关的日志文件副本, 重做已完成的事务 - 需要 DBA 介入 (重装介质) - 但具体恢复由 DBMS 完成
### 具有检查点的恢复技术 - 搜索整个日志耗时; 重做已做事务浪费时间 - 增加检查点 (Checkpoint) 记录 - 记录建立时刻所有正在执行的事务清单 - 记录这些事务最近日志记录的地址 - 重新开始文件: 记录检查点在日志中的地址
### 利用检查点的恢复策略 - 分类处理: 根据事务在检查点和故障点之间的状态 - $T\_1$ (检查点前提交): 不需恢复 - $T\_2, T\_4$ (故障前提交): 重做 (REDO) - $T\_3, T\_5$ (故障时未完成): 撤销 (UNDO) - 优点: 显著提高恢复效率
### 数据库镜像 - 自动把整个数据库或关键数据复制到另一个磁盘 - 主数据库更新时, DBMS 自动更新镜像数据 - 介质故障恢复: 镜像磁盘继续提供服务, 自动恢复, 无需停机 - 并发操作: 可用于读取, 提高性能 - 代价: 降低更新效率 (需写两份) - 通常只镜像关键数据
### 11. 数据库恢复技术 - 阐述事务的四个特性 (ACID). - "先写数据库, 后写日志" 在发生故障时会产生什么具体的后果? - 日志文件在数据库恢复技术中起到了什么作用? - 为什么要建立重做队列和撤销队列? - 阐述介质故障的恢复流程. - 在用日志文件恢复时, 为什么对撤销队列中的事务要做反向扫描? ---- [ 7.2 数据库设计](dbpa-7-2.html#/overview) [| 练习 |](dbpa-exec.html) [ 12 并发控制](dbpa-12-1.html#/overview)

黑公网安备23010302001726号   黑ICP备2024033110号-1