文章目录
数据库的故障分类
事务故障
- 某个程序自身运行引起的故障
- 只影响当前事务本身
系统故障
- 由于掉电、非正常关机等引起的故障
- 影响正在运行的事务以及数据库缓冲区,数据库缓冲区将涉及到正在运行和已经运行的事务
- 会造成数据库缓冲区和磁盘上的数据的不一致,因为数据库的缓冲区是易失的。
介质故障
- 由于介质损坏引起的故障
- 影响是全面的,既影响内存中的数据,又影响介质中的数据
故障恢复的宏观思路
- 把当前数据库的不正确状态恢复到哦已知为正确的某一个状态
- 保持事务的 原子性 和 持久性。
事务故障恢复
事务故障的恢复可以通过**重做事务(Redo)和撤销事务(Undo)**来恢复。重做事务可以保证事务的持久性,而撤销事务则能够消除未提交事务的影响。
系统故障恢复
- 要维护运行日志
- 通过运行日志来完成故障的恢复
运行日志(System log)
- 因为运行日志可以直接通过日志缓冲 log buffer 直接存到磁盘介质上,而且对于故障恢复有很大的作用,因此,必须在进行读写操作之前先运行日志。写日志成功后再与数据库缓冲区进行信息交换
运行日志进行故障恢复的细节
- 根据日志从开始点按照日志的顺序运行日志记录的语句和事务直到故障点
- 如果发生故障点处的事务未完成,那么这个事务将会被撤销
- 但由于日志量很大,不可能永远都从日志的起点开始恢复。因此衍生出了 checkpoint 检查点概念
Checkpoint 检查点
- 系统定期设置检查点
- 在检查点强制内存将 buffer 缓冲区中的内容写入磁盘,保持一致
- 检查点保证在检查点以及之前的内存中的数据都与磁盘中保持一致
- 故障发生时,检查点之前的数据不需要恢复
- 检查点之后结束或发生的事务需要依据日志进行恢复。故障点发生前的事务依照日志重做,故障点当时未完成的事务撤销。
介质故障恢复
- 采用 RAID 技术,即磁盘的冗余阵列在创建数据库的时候就保证其可靠性
- 使用备份(copy)
转储点(DP)dump point
- 备份每次都是把数据库内容存到另一个磁盘上
- 那么隔多久存一次,这个物理备份的频率就尤为重要
- 转储点,就是上一次物理备份备份到的节点