【数据库原理】(27)数据库恢复

在数据库系统中,恢复是指在发生某种故障导致数据库数据不再正确时,将数据库恢复到已知正确的某一状态的过程。数据库故障可能由多种原因引起,包括硬件故障、软件错误、操作员失误以及恶意破坏。为了确保数据库的安全性和完整性,数据库管理系统(DBMS)必须具有有效的恢复机制。

一.故障的种类

在数据库系统中,可能发生的故障主要包括事务故障、系统故障、介质故障和计算机病毒。每种故障类型都可能对数据库的正常运行产生影响,因此需要相应的恢复机制来应对这些故障。

1. 事务故障

事务故障指事务未达到预期终点,使得数据库可能处于不正确状态。这包括事务内部的非预期故障,如运算溢出、并发事务死锁等。恢复程序通过事务撤销,即回滚事务已做出的对数据库的修改,将事务恢复到未启动的状态,以保证数据一致性。

2. 系统故障

系统故障是指导致系统停止运转的各种事故,例如硬件错误、操作系统故障、DBMS代码错误、突然停电等。这类故障影响正在运行的所有事务,可能导致数据库非正常终止。在系统重新启动时,恢复子系统需要回滚未完成的事务,并重做已提交的事务,以将数据库恢复到一致状态。

3. 介质故障

介质故障,也称为硬故障,指外存故障,如磁盘损坏、磁头碰撞等。这类故障可能破坏整个数据库或部分数据库,影响存取这部分数据库的所有事务。在发生介质故障后,需要将后援副本装入数据库,并重新执行已成功完成的事务,将已提交的结果重新写入数据库。

4. 计算机病毒

计算机病毒是一种人为的故障或破坏,它可以繁殖和传播,对计算机系统,包括数据库,造成破坏。计算机病毒可能导致数据的损坏和系统的不稳定,需要采取相应的安全防护措施来避免病毒的侵害。

二.故障恢复

数据库系统的恢复机制涉及建立备份数据和如何利用备份数据来修复数据库。备份数据的建立通常采用数据转储和日志文件技术。

1. 数据转储

数据转储是将数据库定期复制到转储设备(如磁带或磁盘)的过程。转储设备中的备用数据库文件称为后备副本。静态转储和动态转储是两种常见的方式。

  • 静态转储和动态转储:

    • 静态转储: 在系统中无运行事务时进行的转储操作,转储时数据库处于一致性状态。静态转储简单但会降低数据库的可用性。
    • 动态转储: 允许在转储期间对数据库进行访问或修改,可以并发执行。需要记录转储期间各事务对数据库的修改活动,建立日志文件。动态转储克服了静态转储的缺点。
  • 海量转储和增量转储:

    • 海量转储: 每次转储全部数据库,便于恢复。
    • 增量转储: 每次只转储上一次转储后更新过的数据,适用于大型且频繁更新的数据库。
      在这里插入图片描述

2. 日志文件

日志文件用于记录每一次对数据库的更新活动,分为数据块为单位和记录为单位的两种格式。登记日志文件的目的是为了数据库的恢复,包括事务故障恢复、系统故障恢复和介质故障恢复。

  • 作用:
    • 用于事务故障和系统故障恢复,协助后备副本进行介质故障恢复。
    • 在动态转储方式中,必须与后备副本一起使用。
    • 在静态转储方式中,可用于重新装入后备副本和对已完成事务的重做处理。

3. 恢复事务

发生故障时,首先根据前次转储的后备副本恢复数据库,然后利用日志文件进行事务的恢复。

  • 恢复步骤:

    1. 从头扫描日志文件,找出已经结束和尚未结束的事务。
    2. 对尚未结束的事务进行撤销(UNDO)处理和已经结束的事务进行重做(REDO)处理。
  • 撤销和重做处理:

    • 撤销处理: 反向扫描日志文件,对每个事务的更新操作执行反操作,恢复修改过的数据。
    • 重做处理: 正向扫描日志文件,重新执行登记的事务的操作,确保数据库恢复到正确状态。

三.恢复策略

恢复策略针对事务故障、系统故障和介质故障分别制定,以确保数据库的一致性和可靠性。

1. 事务故障恢复

事务故障是指事务在运行至正常终止点前被终止,恢复子系统通过利用日志文件撤销已对数据库进行的修改来进行事务故障恢复。

  • 步骤:
    1. 反向扫描日志文件,查找该事务的更新操作。
    2. 对该事务的更新操作执行逆操作,包括插入、删除和修改。
    3. 继续反向扫描日志文件,直到读到该事务的开始标记。

事务故障的恢复由系统自动完成,对用户透明,无需用户干预。

2. 系统故障恢复

系统故障分为两种情况:未完成事务对数据库的更新可能已写入数据库,已提交事务对数据库的更新可能还留在缓冲区没有写入数据库。因此,系统故障的恢复操作包括撤销故障发生时未完成的事务和重做已完成的事务。

  • 步骤:
    1. 正向扫描日志文件,找出已提交和尚未完成的事务,将其分别记录在重做队列和撤销队列中。
    2. 对撤销队列中的事务进行撤销操作,即反向扫描日志文件执行逆操作。
    3. 对重做队列中的事务进行重做操作,即正向扫描日志文件重新执行事务的操作。

系统故障的恢复由系统自动完成,无需用户干预。

3. 介质故障恢复

介质故障包括磁盘上的物理数据和日志文件的破坏,恢复操作涉及重装数据库并重做已完成的事务。

  • 步骤:
    1. 装入最新的数据库副本,将数据恢复到最近一次转储时的一致性状态。
    2. 若为动态转储,同时装入转储开始时刻的日志文件副本,利用系统故障恢复方法(REDO+UNDO)将数据库恢复到一致性状态。
    3. 若为静态转储,数据库即处于一致性状态。
    4. 装入相应的日志文件副本,重做已完成的事务。

介质故障的恢复需要DBA介入,但只需重装最近转储的数据库副本和相关的日志文件副本,然后执行系统提供的恢复命令。

综合这些恢复策略,数据库系统能够有效地处理各类故障,确保数据的完整性和系统的可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多合一小程序商城系统源码:支持全平台端口 附带完整的搭建教程

现如今,随着移动互联网的飞速发展,小程序已经成为电商行业的新宠。罗峰给大家分享一款多合一小程序商城系统源码。该系统旨在为商家提供一个功能强大、易于搭建和管理的电商平台,帮助商家快速占领市场,提高品牌影响力。 以下是部…

day08

回顾 1.选择排序原理: 找到最小值的下标,交换 2.冒泡排序原理: 比较相邻的两个元素,把最小值放到左边。第一次比较的时候最大值放到最右边了,以此类推今天的内容 1类和对象 2.类和对象内存 3.构造方法 1.从生活的角度区理解面向对象开发 有两…

C program to check little vs. big endian

void main() {int n 1;// little endian if trueif(*(char *)&n 1)printf("This is little endian\n");elseprintf("This is big endian\n"); }Suppose we are on a 32-bit machine. And char type is 8 bits

如何配置mybatisplus基础环境?

1.在pom文件&#xff08;都加上吧&#xff0c;以防万一&#xff09; 2.若当初有mybatis的依赖&#xff0c;要删除 3.在Mapper接口加上"extends BaseMapper<实体类型>" 4.更改yml文件内容 别名扫描包&#xff1a;是指实体类型 5.添加"extends ServiceIm…

互联网行业的高水平简历怎么写?(附模板)

HR浏览一份简历也就25秒左右&#xff0c;如果你连「好简历」都没有&#xff0c;怎么能找到好工作呢&#xff1f; 如果你不懂得如何在简历上展示自己&#xff0c;或者觉得怎么改简历都不出彩&#xff0c;那请你一定仔细读完。 互联网运营个人简历范文> 男 22 本科 AI简历…

Java智能导诊系统 (3D人体导医)源码

智能导诊是一种利用人工智能技术来帮助患者进行自助问询及挂号服务的系统。通过智能导诊系统&#xff0c;患者可以输入自身疾病的症状表现&#xff0c;或选择身体部位&#xff0c;在系统的多维度计算下&#xff0c;系统会根据患者提供的信息精准推荐科室&#xff0c;并引导患者…

DataX数据同步(全量)

1. DataX简介 1.1 DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 源码地址&#xff1a;https://github.com/alibaba/Dat…

Elasticsearch:聊天机器人教程(一)

在本教程中&#xff0c;你将构建一个大型语言模型 (LLM) 聊天机器人&#xff0c;该机器人使用称为检索增强生成 (RAG) 的模式。 使用 RAG 构建的聊天机器人可以克服 ChatGPT 等通用会话模型所具有的一些限制。 特别是&#xff0c;他们能够讨论和回答以下问题&#xff1a; 你的…

构建基于RHEL9系列(CentOS9,AlmaLinux9,RockyLinux9等)的支持63个常见模块的PHP8.1.20的RPM包

本文适用&#xff1a;rhel9系列&#xff0c;或同类系统(CentOS9,AlmaLinux9,RockyLinux9等) 文档形成时期&#xff1a;2023年 因系统版本不同&#xff0c;构建部署应略有差异&#xff0c;但本文未做细分&#xff0c;对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…

LLM之RAG理论(五)| 使用知识图谱增强RAG

知识图谱&#xff08;KG&#xff09;或任何图都包括节点和边&#xff0c;其中每个节点表示一个概念&#xff0c;每个边表示一对概念之间的关系。本文介绍一种将任何文本语料库转换为知识图谱的技术&#xff0c;本文演示的知识图谱可以替换其他专业知识图谱。 一、知识图谱 知识…

2719. 统计整数数目

给你两个数字字符串 num1 和 num2 &#xff0c;以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件&#xff0c;我们称它是一个好整数&#xff1a; num1 < x < num2min_sum < digit_sum(x) < max_sum. 请你返回好整数的数目。答案可能很大&#xff…

【LeetCode:76. 最小覆盖子串 | 滑动窗口】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

帆软报表11.0.19增加postgres数据源方案

项目使用postgres数据库&#xff0c;帆软报表集成开发时需要手工增加该数据源。 https://help.fanruan.com/finereport/doc-view-2563.html 但增加数据源后测试报告无此驱动&#xff0c;经查看文档&#xff0c;现在是通过驱动管理来上传&#xff0c; 但新版又不允许上传驱动JAR…

走迷宫(c语言)

前言&#xff1a; 制作一个迷宫游戏是一个有趣的编程挑战。首先&#xff0c;我们需要设计一个二维数组来表示迷宫的布局&#xff0c;其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来&#xff0c;我们需生成迷宫。在生成迷宫的过程…

2024年【上海市安全员C3证】模拟考试题及上海市安全员C3证模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年上海市安全员C3证模拟考试题为正在备考上海市安全员C3证操作证的学员准备的理论考试专题&#xff0c;每个月更新的上海市安全员C3证模拟考试题库祝您顺利通过上海市安全员C3证考试。 1、【多选题】《上海市建设…

STC15系列单片机:定时器/计数器16位自动重装载模式

一、定时器与计数器的理解 STC15系列单片机内部有5个16位定时器/计数器&#xff0c;分别是T0、T1、T2、T3、T4。 定时器与计数器&#xff0c;东西还是同一个东西&#xff0c;只是用法和功效不一样&#xff0c;就好比黄瓜&#xff0c;既可以内服也可以外敷&#xff0c;黄瓜还是…

深入理解 go chan

go 里面&#xff0c;在实际程序运行的过程中&#xff0c;往往会有很多协程在执行&#xff0c;通过启动多个协程的方式&#xff0c;我们可以更高效地利用系统资源。 而不同协程之间往往需要进行通信&#xff0c;不同于以往多线程程序的那种通信方式&#xff0c;在 go 里面是通过…

Rust-所有权和移动语义

什么是所有权 拿C语言的代码来打个比方。我们可能会在堆上创建一个对象&#xff0c;然后使用一个指针来管理这个对象&#xff1a; Foo *p make_object("args");接下来&#xff0c;我们可能需要使用这个对象&#xff1a; use_object(p);然而&#xff0c;这段代码之…

继承、修饰符、工具类、jar包

目录 1.继承 2.修饰符 3.工具类 4.jar包的制作与使用 1.继承 是什么 1.面向对象的三大特征之一&#xff08;封装、继承、多态&#xff09; 2.可以使得子类具有父类的属性和方法&#xff0c;还可以在子类中重新定义&#xff0c;追加属性和方法。 继承的格式 public class F…

Camtasia2024最新版本如何进行电脑录制屏幕?

在现在的网络互联网时代&#xff0c;越来越多的人走上了自媒体的道路。有些自媒体人会自己在网络上录制精彩视频&#xff0c;也有一些人会将精彩、热门的电影剪辑出来再加上自己给它的配音&#xff0c;做成大家喜欢看的电影剪辑片段。相信不管大家是自己平时有独特的爱好也好、…