1.日志相关概念
1.1日志分类
1.undo日志
2.redo日志
3.undo/redo日志(这一类型的日志不是简单的undo,redo的组合)
1.2日志的特性
1.单条日志记录记载某个事物已经做的某个动作的信息
2.单条日志记录记载某个事物已经做的某个动作的信息
3.日志记录最初在内存中创建,再在适时的时候记录到磁盘中
1.3日志所做的修复工作
1.某一些事物所做的操作将会被取消,就像没有发生一样
2.某些事物的工作会被重做,一些写入数据库的值将会被重写;
1.4日志能能恢复数据的前提
1.磁盘上的数据库数据还在,否则就不能修改数据
2.不同的日志回复数据的前提条件是,日志提交的时机需要和日志规则想匹配
1.5日志记录的内容
1.某个事物开始<Ti START>
2.某个事物提交<Ti COMMIT>
3.某个事物取消<TiABORT>
4.对数据相关操作
1.6出现故障时日志情况
1.已经完全提交的事物
2.没有提交的事物
3.已经取消的事物
2.undo日志
1.1日志记录的内容
1.某个事物开始<Ti START>
2.某个事物提交<Ti COMMIT>
3.某个事物取消<TiABORT>
4.对数据相关操作<Ti,X, Vb>
Ti就表示Ti的事物
X 代表被修改的元素
Vb代表被修改元素在修改之前的值
1.2undo日志回复数据
使用undo日志回复的前提:Commit日志必须是在更新数据库元素写入磁盘之后再才写入磁盘(对上出解释:说白了就是更新的数据先写入磁盘,日志信息后写入磁盘)
修复规则 :
1.已经提交事物
不做任务处理(commit操作写入数据库之前,更新的数据已经写入数据库,所以该操作已经完成,符合一致性)
2.已取消事物
不做任务处理(已经有取消的日志,说明,数据库中的数操作也被取消了)
3.没有提交事物
需要进行回滚(未提交,说明可能有一部分更新操作已经进写入了数据库,另外一部分没有写入数据库,所以需要做回滚,回滚之后的能保持数据一致性,但是相当于是就没有发生任何事情,比如说打款,打款人打了100块,没有打出去,收款人也没有收到100,需要打款人再打100)
恢复方法
逆向扫描日志,按照上述修复规则来回复
1.4undo日志回复数据
1.undo回复是具有,幂等性的
2.存在已经更新了数据库数据,但是没有来得及写入日志的,也被回滚了,相当于是做了两次更细操作
1.5检查点 解释:某个时间点停止数接受新的数据库事务,等代所有事务完成之后,再接受新的事物
1.优缺点
优点:只需要逆向从日志最后回复到最近的一个检查点即可,最近检查点之前的数据都是已经提交的,无序回滚
缺点:事物的并发性太低;相当于数据库系统停止了运行
2.恢复方式
逆向恢复到最近的一个开始的检查点即可
1.6模糊检查点
1.检查点开始的时候,会记录每一个事物,等到被记录的所有事物都结束了之后,检查点结束(但是可以接受新的其他的事物)
2.优点
支持并发的事物,提高数据库系统运行效率
3.恢复方式
逆向恢复到最近的一个模糊检查点开始的位置就行
2.redo日志
1.1记录内容
前三样和undo日志一样
<Ti,X,Vb> Vb是数据库元素更新之后的值
1.2恢复数据
1.前提条件 :只有一个事物所有的相关的日记录都记录到了磁盘之后,数据库更新的元素进行更新操作
2.恢复规则
已提交事物,需要做处理,即使有提交事物,但是也不能表明所有的更新操作都被写入了数据库,所以就需要用Vb,也就是用更新之后的值去更新数据库对应的元素的值。
未提交事物,无需做任何处理,因为事物没有提交就表明,数据库元素也没有被更新,所以才无需做任务处理,事物就像没有发生过样,打款就相当被撤销了,需要重新打款
3.恢复方式
逆向找到已经提交的提交的事物,用更新之后的数据再去更新他们的数据。
1.3检查点
1.与undo日志的不同
由于日志是先写入磁盘,会导致即使已经提交的事物,也不能保证是已经写入了磁盘了,所以也需要考虑已经提交的事物
检查点的是指不必等待事物全部提交或者中止,
2.检查点设置 1.检查点开始的时候,记录所有的没有结束的事物;2.将提交的事物,保存在缓冲区中的数据更新写入磁盘;3.记录结束点
3.恢复方式 逆向回复到最近的一个最近的一个检查点开始
4.找到一个事物开始时间最早,还没有结束的时间点,,可以删除这个时间点之前的数据
3.undo/redo日志
1.1前两种日志的缺点
undo日志,要求更事物结束之后,立即将数据更新到数据库,会增加磁盘的io
redo日志,事物更新的数据和日志记录都实现保存在缓冲区中,增加了事物需要的缓冲区
1.1使用undo/redo日志恢复
1.前提条件
遵守日志优先写入磁盘协议
2.日志记录数据
前三者都一样
<Ti,X,Vb,Va>
记录数据元素更新之前和更新之后的值
3.更新的规则
从前往后,重做所有已经提交的事物(日志优先写入,事物提交也不代表更新到了磁盘中,需要将更新后的值再次更新需要更新的元素)
从后往前,撤销所有没有提交的事物(事物没有提交,说明某些更新操作也没有进入到数据库,表明由于故障原因可能有些更新操作没有记录到日志,这样造成,如果不撤销,那么一部分更新操作进行了,一部分更新操作由于确实日志数据没有做更新操作,导致数据不一致)
1.1检查点
1.设置
设置
1.开始点记录所有活跃事物,2.将所有在缓冲区中的更新的数据库元素全部写入磁盘,3.结束点
回复方式比较复杂:截图展示如下