当前位置: 首页 > article >正文

【从零开始学习计算机科学】数据库系统(八)数据库的备份和恢复

【从零开始学习计算机科学】数据库系统(八)数据库的备份和恢复

  • 备份和恢复
    • 事务故障
    • 系统故障
    • 磁盘故障
    • 其他故障
    • 故障的恢复
    • 日志
      • 日志缓冲区
    • 事务故障的恢复
    • 系统故障的恢复
      • 系统故障的恢复步骤
    • 检查点
      • 检查点的执行过程
    • 备份
    • 日志文件备份
    • 远程备份
    • 恢复策略
      • 事务故障恢复策略
      • 系统崩溃恢复策略
      • 磁盘故障恢复策略
    • 数据库恢复小结

备份和恢复

系统可能发生的故障有很多种,每种故障需要不同的处理方法。数据库系统主要会发生以下几种故障。

事务故障

有两种错误可能造成事务执行失败:

  1. 逻辑错误:事务由于某些内部条件而无法继续正常执行,这样的内部条件如非法输入、找不到数据、溢出或超出资源限制。
  2. 系统错误:系统进入一种不良状态(如死锁),结果事务无法继续正常执行,但该事务可以在以后的某个时间重新执行。

系统故障

硬件故障,或者是数据库系统或操作系统的漏洞,导致易失性存储器内容的丢失,并使得事务处理停止,而非易失性存储器仍完好无损。
硬件错误和软件漏洞导致系统终止,而不破坏非易失性存储器内容的假设称为故障-停止假设。设计良好的系统在硬件和软件层有大量的内部检查,一旦错误发生就会将系统停止。因此,故障-停止假设是合理的。

磁盘故障

在数据传送操作过程中由于磁头损坏或故障造成磁盘块上的内容丢失。其他磁盘上的数据拷贝,或三级介质(如DVD或磁带)上的归档备份可用于从这种故障中恢复。

其他故障

天灾(地震或火灾等自然灾害),人祸(人为破坏机房或数据),间谍或黑客攻击,等。

故障的恢复

稳定存储器或者近似稳定存储器在恢复算法中起着至关重要的作用。
稳定存储器通常是用非易失性存储介质来近似实现,在多个非易失性存储介质上以独立的故障模式复制所需信息,并且以受控的方式更新信息,以保证数据传送过程中发生的故障不会破坏所需信息。

系统如何从故障中恢复?首先需要确定用于存储数据的设备的故障方式;其次,考虑这些故障方式对数据库内容的影响;最后提出在故障发生后仍保证数据库一致性以及事务原子性的恢复算法。
如果想要恢复到故障发生前的状态,就必须知道当时的状态。那么如何实现呢?答案是引入日志记录数据库中所有修改。因为存储器是计算和保存的基础,计算过程中数据仅临时使用,而最终结果数据将永远保存。

日志

常用日志记录格式:

  • 更新日志记录:<Ti,Xj,V1,V2>,描述一次数据库写操作。包含事务标识、数据项标识、旧值和新值等字段。
  • 事务开始日志记录:<Ti start>,表明事务Ti开始执行。
  • 事务提交日志记录:<Ti commit>,表明事务Ti提交。事务提交日志记录是一个事务最后的一个日志记录,当一个事务的提交日志记录输出到稳定存储器后,意味着该事务提交,也就是所有更早的日志记录都已经输出到稳定存储器中。因此,在日志中就有足够的信息来保证,即使系统崩溃,事务所做的更新也可以重做。
  • 事务中止日志记录:<Ti abort>,表明事务Ti中止。

登记日志的原则

为保证数据库是可恢复的,登记日志文件时必须遵循两条原则:

  1. 登记的次序严格按并行事务执行的时间次序;
  2. 必须先写日志文件,后写数据库。

其中,写日志文件操作是把表示这个修改的日志记录写到日志文件;写数据库操作是把对数据的修改写到数据库中。

在故障恢复机制中,采用日志记录数据库更新,日志记录在创建时都输出到稳定存储器。 通常向稳定存储器的输出是以块为单位进行的,而大多数情况下,一个日志记录比一个块要小得多,每个日志记录的输出就转化成在物理上大得多的输出&#


http://www.kler.cn/a/583821.html

相关文章:

  • 制造执行系统(MES)系统基本流程
  • 22 - 天 TCPIP 四层模型是什么?Cookie、Session、Token 之间有什么区别?从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
  • 大白话在 React 中,如何处理表单的复杂验证逻辑?
  • Java中的Logback:高效日志管理解析
  • 如何设计微服务及其设计原则?
  • 【21】单片机编程核心技巧:if语句逻辑与真假判断
  • MCP服务协议详细介绍
  • 【春招笔试】2025.03.13-携程春招笔试
  • CCF CSP 第30次(2023.09)(1_坐标变换_C++)(先输入再计算;边输入边计算)
  • Docker配置代理,以保证可以快速拉取镜像
  • 基于ESP32的桌面小屏幕实战[8]:任务创建
  • 图的存储--十字链表与邻接多重表
  • 2020年SCI1区TOP:自适应粒子群算法MPSO,深度解析+性能实测
  • 【GPT入门】第18课 langchain介绍与API初步体验
  • 【蓝桥杯速成】| 2.逆向思维
  • 双链笔记新选择!使用Docker私有化部署Logseq知识库远程团队协作
  • STM32 单片机常见的 8 种输入输出模式
  • 【算法day9】回文数-给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
  • 电脑突然没有声音的可能原因与应对方法
  • python web开发django库安装与使用