在数据库中,除了数据表空间、索引表空间分别用于存放表数据和索引文件之外,还有 Undo 表空间和Redo 表空间是两个用于支持事务处理和数据恢复的关键概念
1. Undo 表空间(撤销表空间):
-
作用:
- 存储用于回滚事务的数据(撤销信息),以支持事务的一致性。
- 提供多版本并发控制(MVCC)所需的历史数据版本,确保事务在执行查询时能够看到一致的数据快照。
- 如果事务回滚,Undo 数据会被用来恢复到事务开始前的状态。
-
特点:
- 通常与用户的操作直接相关,例如更新、删除等。
- 在事务提交后,部分 Undo 数据可能会被清理,但在使用 MVCC 时,可能仍会保留一段时间供查询使用。
-
存储内容:
- 每条修改记录的“前镜像”(Before Image)。
-
主要用途:
- 回滚事务。
- 支持一致性读(查询运行时看到的数据快照)。
2. Redo 表空间(重做日志空间):
-
作用:
- 记录事务修改后的数据(重做信息),以便在系统发生崩溃时通过重做操作恢复数据库。
- 支持事务的持久性(即事务日志化)。
-
特点:
- 与事务日志相关,记录数据的“后镜像”(After Image)。
- 包括已提交和未提交事务的修改日志,直到事务完成和数据刷新到磁盘。
-
存储内容:
- 数据页的修改信息(包括插入、更新、删除等操作的后续状态)。
-
主要用途:
- 数据库崩溃后的数据恢复。
- 确保事务日志不丢失。
两者对比:
特性 | Undo 表空间 | Redo 表空间 |
---|---|---|
存储内容 | 数据的“前镜像”(Before Image) | 数据的“后镜像”(After Image) |
主要用途 | 回滚事务、一致性读 | 恢复数据、持久性保障 |
数据清理 | 事务提交后,可能保留一段时间再清理 | 按照日志策略清理,通常通过循环覆盖 |
写入时机 | 用户数据操作时产生 Undo 记录 | 事务提交或操作开始时产生 Redo 记录 |
与崩溃恢复相关 | 较少(不用于崩溃恢复) | 关键(崩溃恢复的核心) |
两者关系:
Undo 和 Redo 空间是互补的:
- Undo 关注事务的一致性和回滚。
- Redo 关注数据的持久性和恢复。
例如:
- 在事务发生时,Undo 会记录修改前的值,Redo 会记录修改后的值。
- 如果系统崩溃,Redo 日志会用于恢复已提交事务的结果,Undo 日志会用于回滚未完成的事务。