关系型数据库日志解读

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.结束点

回复方式比较复杂:截图展示如下

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值