【数据库原理】(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,一经查实,立即删除!

相关文章

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

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

安卓之视频智能字幕的应用场景以及各种技术优劣分析

一、文章摘要 随着技术的发展,智能字幕已经成为了安卓平台上一个重要的功能,特别是在视频播放方面。它为用户提供了一种更方便、更快捷的方式来理解视频内容,尤其是在多种语言环境下或者在没有声音的环境中。下面我们将详细探讨安卓平台上视频…

BP-50 开发框架使用解读

【独家框架】UWB DWM1000 开源项目框架 - 基础知识 51uwb.cn [重要更新]51uwb_base code中断更新 - 基础知识 51uwb.cn 【软件资料】BP50 套件新框架定位代码实现 - 基础知识 51uwb.cn 【开源项目】纯Python TWR算法UWB上位机 - 基础知识 51uwb.cn 上位机软件通信协议更改说明 …

【打卡】牛客网:BM88 判断是否为回文字符串

我写的: 其实不用考虑奇数长度还是偶数长度。 class Solution { public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * param str string字符串 待判断的字符串* return bool布尔型*/bool judge(strin…

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…

Python中英文时间转换

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

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

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;对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…

测试学习——答疑

1、什么是软件测试&#xff1f; 一个产品质量好&#xff0c;用户的使用感受佳&#xff0c;用户才愿意为此付费&#xff0c;这样企业才会获取收益&#xff0c;如果一个产品bug太多的话&#xff0c;那用户就不会买账。所以软件测试就是对产品进行测试&#xff0c;提高测试质量&am…

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

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

Go中更安全的枚举

iota Go让你用iota来使用枚举。 const (Guest iotaMemberModeratorAdmin )虽然Go是明确的&#xff0c;但iota似乎相对模糊。如果你以任何其他方式对const组进行排序&#xff0c;你会引入副作用。在上面的例子中&#xff0c;你仅仅对第一个参数Guest赋值了。你可以显式地给每…

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;…

【Element】el-input 限定输入是 只能是数字和符号 -

<template><div><el-input v-model"inputValue" input"handleInput"></el-input></div> </template><script> export default {data() {return {inputValue: };},methods: {handleInput(value) {// 使用正则表达…

LeetCode刷题--- 粉刷房子

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…