硬核课堂
用户720
添加快捷方式
分享
数据库系统故障对策 -- Logging
输入“/”快速插入内容
数据库系统故障对策 -- Logging
手写KV引擎(第一部分)-实现单机kv引擎
可恢复性
我们讨论可能发生的问题、以及数据库系统做了什么
数据库系统中的正确性模型
数据库的状态和事务
在讨论系统失败前,我们必须定义一个数据库状态的概念。
a.
数据库元素
i.
数据库元素,是数据库访问的数据单元
ii.
数据库元素的集合组成了数据库
iii.
不同的 DBMS 使用不同的数据库元素概念,比如
1.
关系
2.
磁盘块
3.
关系中的元组
b.
数据库元素的状态
i.
当前在数据库元素中存储的值
c.
数据库状态
i.
所有数据库元素的集合的状态
ii.
可以通过改变数据库元素来改变状态
我们需要一个机制,来导致数据库从一个状态到另一个状态的改变 -- 事务
日志记录
a.
日志记录技术的种类
i.
Undo Logging: 对于一个未完成的事务,Undo Logging 可以帮助回滚操作
ii.
Redo Logging: 对于一个已完成的事务,Redo Logging 可以重做操作
iii.
日志文件往往包含二者
b.
日志记录
c. 日志写入的规则
每一种类型的 Logging必须遵守特定的写入规则,指的是写入磁盘的特定顺序
Undo Logging
日志规则
只要事务和缓冲区管理器遵守两条规则,undo 日志就可以保证从系统故障中恢复。
U1:如果事务 T 改变了数据库元素 X,那么<T,X,v>的日志记录必须在 X 的新值写入磁盘之前完成写入
U2:如果事务提交,
则其 COMMIT 日志记录必须在事务改变的所有数据库元素先写到磁盘后在写到磁盘中
。
b.
指名改变的所有数据库元素的日志记录
c.
改变的数据库元素自身
d.
COMMIT 日志记录
使用 Undo 日志恢复
恢复管理器不管日志文件有多长,都要遍历整个日志文件。
a.
将事务划分为已提交和未提交事务。
b.
如果事务 T 的 COMMIT 记录被扫描到,则什么也不做
c.
T 是一个未完成的事务或者中止的事务,恢复管理器必须将 X 的值改回 V
检查点
恢复原则上需要检查整个日志,但是一旦事务的 COMMIT 日志记录被写到磁盘上,那么该事务的所有日志记录在恢复时就不再需要。