原子性
全做或全不做,防止半套更新
让数据库从错误状态回到一致状态
事务边界、ACID 和故障范围共同决定恢复方向
一个程序可以包含多个事务;一个事务要么全部提交,要么全部撤销

不等于。COMMIT 接受事务结果并承诺持久保存,日志、缓冲和存储实现共同兑现这一承诺
转账案例能同时展示原子性和一致性
全做或全不做,防止半套更新
遵守约束并从一致状态到一致状态
并发控制可见性和交错影响
提交结果在故障后仍应保留
恢复直接支撑原子性、一致性和持续性;隔离性主要由并发控制保证
事务边界把两个更新绑定在一起,未提交暂态不应对外可见
| 时刻 | 余额示意 | 事务语义 | 对外状态 |
|---|---|---|---|
| 开始 | A=100,B=50 | 事务已开始 | 一致状态 |
| 中间 | A=90,B=50 | 未提交事务内部暂态 | 对外不可见 |
| 提交 | A=90,B=60 | 结果被接受并承诺持久 | 新的一致状态 |
| 故障 | 可能停在中间 | 未完成事务 | 按故障状态恢复 |
不能。未提交的半套更新必须撤销,转账事务只能整体提交或整体回滚
恢复子系统利用系统中保存的冗余信息
恢复目标不一定是故障发生前的最新时刻,而是可以验证的一致状态;日志、检查点和镜像把恢复方向落实为具体实现
恢复的基本原理是用别处保存的数据重建被破坏或不正确的部分
故障范围不同,恢复动作也不同
| 故障 | 影响 | 典型来源 |
|---|---|---|
| 事务故障(事务内部故障) | 一个事务未正常结束 | 溢出、死锁、约束违约 |
| 系统故障 | 主存、缓冲区和运行事务丢失,磁盘通常仍可信 | 断电、操作系统或 DBMS 崩溃 |
| 介质故障 | 磁盘或日志被破坏,原介质不再可信 | 磁盘损坏、恶意加密 |
恢复方向来自事务是否完成、更新是否写入,以及哪一份介质仍然可信
| 情况 | 动作 | 目标 |
|---|---|---|
| 事务未完成且更新已写入 | UNDO | 撤销未完成更新 |
| 系统故障后未完成/已提交事务 | 未完成 UNDO;已提交 REDO | 处理缓冲区丢失造成的两类缺口 |
| 介质数据损坏 | 重装可信副本并结合相关日志按状态 UNDO/REDO | 从可信状态重建 |
未完成事务可能已有写入,需要 UNDO;已提交事务的数据页可能尚未落盘,需要 REDO。介质恢复还要根据副本状态结合日志判断恢复动作
事务定义一致性边界,恢复把故障后的数据库带回一致状态
用边界、提交与回滚定义逻辑工作单位
ACID 职责边界:恢复支撑原子性、一致性和持续性,并发控制支撑隔离性
按故障范围选择 UNDO、REDO 或副本恢复
日志、检查点和镜像把冗余数据落实为可执行的恢复证据