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

news/2025/3/14 11:41:52/

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

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

备份和恢复

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

事务故障

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

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

系统故障

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

磁盘故障

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

其他故障

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

故障的恢复

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

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

日志

常用日志记录格式:

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

登记日志的原则

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

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

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

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


http://www.ppmy.cn/news/1579034.html

相关文章

qt 自带虚拟键盘的编译使用记录

一、windows 下编译 使用vs 命令窗口&#xff0c;分别执行&#xff1a; qmake CONFIG"lang-en_GB lang-zh_CN" nmake nmake install 如果事先没有 指定需要使用的输入法语言就进行过编译&#xff0c;则需要先 执行 nmake distclean 清理后执行 qmake 才能生效。 …

FX-extern C

C调用C语言编写的函数&#xff1a; 当C代码需要调用C语言编写的函数时&#xff0c;使用extern "C"告诉编译器按照C语言的方式处理函数名。 C语言调用C编写的函数&#xff1a; 当C语言代码需要调用C编写的函数时&#xff0c;使用extern "C"确保函数名不被…

css基本功

为什么 ::first-letter 是伪元素&#xff1f; ::first-letter 的作用是选择并样式化元素的第一个字母&#xff0c;它创建了一个虚拟的元素来包裹这个字母&#xff0c;因此属于伪元素。 grid布局 案例一 <!DOCTYPE html> <html lang"zh-CN"><head&…

KICK第四讲Linux 系统下安装 GCC 编译器全指南

Linux 系统下安装 GCC 编译器全指南 GCC&#xff08;GNU Compiler Collection&#xff09;是 Linux 系统下最常用的编译器之一&#xff0c;支持 C/C、Java 等多种编程语言。本文将介绍不同 Linux 发行版下的安装方法&#xff0c;帮助开发者快速配置开发环境。 一、使用包管理…

RHCE(RHCSA复习:虚拟的安装和设置)

一、安装虚拟机&#xff08;见截图&#xff09; 虚拟机放大&#xff1a;ctrlshift加号 虚拟机缩小&#xff1a;ctrl减号 连接xshell的命令&#xff1a; ssh root(加上自己的ip)虚拟机关机的命令&#xff1a; systemctl poweroff 或者init 0&#xff08;该命令很古老&#xff…

经典可验证文献阅读VerifyNet: Secure and Verifiable Federated Learning

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 联邦学习作为一种新兴的神经网络训练模型&#xff0c;由于其无需采集用户原始数据就能更新参数的能力而受到广…

【数据库】10分钟学会MySQL的增删改查:数据库、表、表记录操作指南

MySQL作为一种广泛使用的开源关系型数据库管理系统&#xff0c;提供了强大的数据操作功能。增删改查&#xff08;CRUD&#xff09;是数据库操作的核心&#xff0c;涵盖创建&#xff08;Create&#xff09;、读取&#xff08;Read&#xff09;、更新&#xff08;Update&#xff…

搭建【Dify】大语言模型(LLM)应用开发平台的详细指南

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Dify 2、Dify应用场景 二、Dify的核心功能与…