数据库复习(故障恢复)
前言#
本文针对考纲上的故障恢复所涉及到的知识进行归纳总结。
事务故障#
是什么#
事务运行结果没有达到预期终点(commit 或者显式rollback)比如:
- 程序员写在程序里的预判,比如取钱事务,检测到余额不足就在else里rollback。
- 算数溢出,并发死锁要进行撤销事务之类的。
解决方案#
事务撤销。
系统故障#
是什么#
(CPU故障,操作系统故障,DBMS代码错误,系统断电等软件故障)造成系统停止运作,使系统要重新启动。
解决方案#
对已经提交的重做。
对其他的撤销。
介质故障#
是什么#
(磁盘损坏 磁头碰撞 瞬时强磁场干扰等硬件故障)
解决方案#
装所有备份,然后根据日志对已经提交的事务一直重做。
详细解决方法#
事务故障#
- 反向扫描事务,查找有更新操作的事务
- 对该事务逆向处理,即把更新前的值写入数据库。
- 继续反向扫描,遇到有更新操作的事务就逆向写数据库
- 直到读到此事务的开始标记,就停下
系统故障#
无检查点#
- 正向扫描日志,建立redo队列和undo队列,已提交的放入redo序列,其他的放在undo序列。
- 对undo队列里的各个事务进行撤销处理,即反向扫描日志文件,把更新前的值写入数据库。
- 对redo队列里的各个事务进行重做处理,即正向扫描日志文件,把更新后的值写入数据库。
有检查点#
- 在重新开始文件,找到最新的检查点在日志文件的地址
- 根据地址去日志文件找到最新检查点记录,得到检查点时刻所有正在执行的事务清单active-list
- 建立redo和undo队列
- 把active-list暂时放到undo队列
- 从检查点开始正向扫描日志,新开始的事务还在undo队列,已提交的事务移到redo队列。
- 完成之后,undo队列执行undo操作,redo队列执行redo操作。
介质故障#
- 装入最新的海量数据库备份
- 依次装入上一步海量数据备份时间后的所有增量数据库备份
- 装入备份结束时刻的日志,利用日志重做所有故障点前已提交的事务,其他不用管
作者:lmj00
出处:https://www.cnblogs.com/lmj00/p/17912669.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本