数据库系统的故障种类
事务故障
事务执行失败:逻辑错误、系统错误。
逻辑错误:系统内部条件导致事务无法正常执行,例如:非法输入、找不到数据、运算溢出等
系统错误:系统外部条件导致事务无法正常执行,例如:并发事务由于死锁而强制撤销事务
恢复:撤销事务UNDO
系统崩溃
造成系统停止运转的任何事件,例如:CPU异常,O/S异常,DBMS异常,拔掉电源等,此时数据库本身并没有遭到破坏,只是数据不正确
恢复:发生系统故障时,对于未提交的事务,强行撤消(UNDO)所有未完成事务,对于事务已经提交,但缓冲区中的信息尚未完全写回到磁盘上(commit or abort))。重做(REDO)所有已提交的事务
检查点恢复机制
检查点
由于扫描整个日志文件比较困难搜索过程耗时,故引入检查点,降低开销。
1.当前缓冲中的日志记录写入日志文件
2.在日志文件中加入一个检查点记录
3.将当前缓冲所有数据写入数据库
4.将检查点记录的地址写入重新开始文件
恢复流程:
- 在重新开始记录文件中找到最后一个检查点记录
- 找到正在执行的事务清单,将其放入UNDO列表
- 从检查点位置开始正向扫描日志文件,如果有新事物开始则放入UNDO队列,如果有事务提交,将其放入REDO队列,指导文件结束
- 对UNDO列表执行UNDO操作,对REDO列表执行REDO操作
介质/磁盘故障
外存故障,数据库遭到破坏,影响正在存取这部分数据的事务,如磁盘破坏,强磁场干扰等
恢复:装入数据库发生故障签的副本,重做此时此刻的所有成功事务,并将这些成功事务已经提交的结果写入数据库
恢复原理:数据冗余
数据转存
数据转存
转存状态:静态转存(系统没有运行事务时进行的操作,过程中禁止操作数据库,降低数据库的可用性)、动态转存(转储期间允许对数据库进行存取和修改)
转存方式:海量转存(每次转存全部数据库)、增量转存(每次转储数据库的增量部分)