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

ops/2025/3/18 15:18:33/

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

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

备份和恢复

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

事务故障

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

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

系统故障

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

磁盘故障

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

其他故障

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

故障的恢复

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

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

日志

常用日志记录格式:

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

登记日志的原则

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

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

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

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


http://www.ppmy.cn/ops/166796.html

相关文章

【春招笔试】2025.03.13-蚂蚁春招笔试题

题目总结 题目一:区间未出现的最小值之和 1️⃣:统计全为1的子数组数量和全为0的子数组数量,利用公式计算 2️⃣:利用数学公式 n(n+1) - 2N0 - N1 计算最终答案 难度:中等 这道题目的关键在于理解 mex 的概念,并发现对于只含 0 和 1 的数组,mex 值只可能是 0、1 或 2。…

前端npm包- CropperJS

文章目录 一、CropperJS**核心特性****官网与文档****安装与使用**1. **通过 npm/yarn/pnpm 安装**2. **HTML 结构**3. **引入 CSS 和 JS**4. **初始化裁剪器** **相关插件/替代方案****适用场景****注意事项** 总结 一、CropperJS cropperjs 是一个轻量级、功能强大的 图片裁…

2.2 B/S架构和Tomcat服务器

本文介绍了B/S架构、Tomcat服务器及其与IDEA的整合。B/S架构是一种基于浏览器的网络计算模式&#xff0c;具有跨平台、易用性强的特点&#xff0c;适用于互联网应用。Tomcat是Apache开源的Web服务器&#xff0c;支持Java Web应用的部署和运行。文章通过实例演示了如何下载、安装…

一键爬取b站视频

同学们。废话不多说&#xff0c; b站视频素材多&#xff0c; 二次加工就归你&#xff0c; 三话不说爬起来&#xff0c; 犯法违纪咱不干 代码 import json import requests from bs4 import BeautifulSoup import re# 目标网址bvnane"BV1hUQEYCEyY" pp("0&q…

前端安全之DOMPurify基础使用

DOMPurify时一款专门用于防御XSS攻击的库&#xff0c;通过净化HTML的内容&#xff0c;移除恶意脚本&#xff0c;同时保留安全的HTML标签和数学。以下是基础使用指南&#xff0c;涵盖基础的安装与用法。 1&#xff0c;安装DOMPurify 通过npm或yarn安装 npm install dompurify …

Excel单元格中插入自定义超链接

Excel单元格中插入自定义超链接 方法一、插入静态自定义超链接 适用场景: 手动设置固定显示文本和链接地址 快捷键 Ctrl K 可显示插入超链接窗口. 方法二、适用HYPERLINK函数动态生成超链接 跳转到超链接 HYPERLINK("https://www.bilibili.com/?","CS…

专栏特辑--如何查询Essential Science Indicators (ESI)- 高被引论文--我的文章和高引文章的差距

灵感就是今天终于查询了一下高被引文章,网上对于ESI高被引的查询方法五花八门,很多都是过时的或者极为繁琐的,或者说半天都说不清楚的,现在来总结梳理一下,以备不时之需。这里只讨论高被引文章,不讨论热点(hot)文章。 所谓高被引--就是received enough citations to p…

【第K小数——可持久化权值线段树】

题目 代码 #include <bits/stdc.h> using namespace std;const int N 1e5 10;int a[N], b[N]; int n, m, len; int rt[N], idx; // idx 是点分配器struct node {int l, r;int s; } tr[N * 22];int getw(int x) {return lower_bound(b 1, b len 1, x) - b; }int bui…