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

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

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

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

备份和恢复

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

事务故障

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

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

系统故障

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

磁盘故障

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

其他故障

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

故障的恢复

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

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

日志

常用日志记录格式:

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

登记日志的原则

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

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

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

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

相关文章:

  • 神经网络常用库-torch(基础操作张量)
  • 奇墨科技FinOps云成本优化:精细化IT成本分摊重塑企业云财务管理
  • JavaScript class
  • Axure设计之下拉多选框制作教程C(中继器)
  • 网络安全防护架构有哪些 网络安全防护措施包括
  • 上下文学习思维链COTPrompt工程
  • SpringMVC响应页面及不同类型的数据,
  • [LeetCode热门100题]|137,260,268,面试17.19
  • vs-code + nRF Connect SDK 编译nrf54l15dk
  • 系统思考:销售业绩与团队士气
  • AD9850函数信号发生器制作(全套资料)
  • C语言 —— 此去经年梦浪荡魂音 - 深入理解指针(卷一)
  • Matlab 条纹点法向量计算
  • PrivHunterAI越权漏洞检测工具详细使用教程
  • openbmc mctpd模块分析
  • Vue源码深度解析:从2.x到3.x的架构演进与核心原理剖析
  • Linux中Firewall防火墙操作
  • Python GUI打包工具对比与选择
  • Ip 等级
  • 拆解 “ES 已死“ 伪命题:Agentic RAG 时代搜索引擎的终极形态
  • 如何制作wap网站/优惠活动推广文案
  • 可以做黄金期权的网站/seo黑帽优化
  • 信息网站建设预算/资源猫
  • 做网站是否需要自购服务器/网络营销怎么做推广
  • 怎样做同性恋女视频网站/百度电话客服24小时人工
  • 丰台住房和城乡建设委员会网站/产品软文范例100字