恢复机制-数据库系统中的故障(事务故障、系统故障、介质故障)、一致性错误、窃取但不强制的缓冲区管理策略

一、引言

数据库管理系统DBMS的事务处理技术实现的一个主要功能部分就是恢复机制,恢复机制完成的功能就是对发生故障后系统中事务的更新结果进行数据恢复,保证事务的原子性和持久性,从而进一步保证数据库的一致性。

数据库系统与其他计算机系统一样易发生故障,可能发生的故障大致可归为事务故障、系统故障和介质故障三类。数据恢复就是针对不同故障导致数据库出现的不一致错误进行的

二、事务故障

事务故障就是在事务执行过程中发生错误,导致事务夭折,不能执行完成。发生的错误主要有两种

  • 一种是事务内部操作受限,如不满足完整性约束限制,访问不到数据、运算溢出等,导致事务无法继续正常执行。比如对于银行转账事务,因账户余额不足让事务回滚
  • 另一种错误是系统进入了一种不良的状态,如发生死锁等,导致事务无法继续正常执行

三、系统故障

1、系统故障是指造成系统停止运转的任何事件,例如CPU等特定类型的硬件故障、操作系统故障、突然断电等。发生系统故障后,系统崩溃,需要重启 

2、由于主存是易失性存储器,会造成主存内容,尤其是数据库缓冲区中的内容丢失,导致所有事务都将非正常终止

但系统故障不会影响到磁盘上的数据库,系统故障常称为软故障

三、介质故障

介质故障被称为硬故障,介质故障主要是指使数据库存储介质发生破坏的故障

  • 一般是磁盘故障,如磁盘损坏、磁头碰撞、即时强磁场干扰等
  • 或者是自然灾害或人为破坏造成的设备毁坏,如爆炸、火灾等引起数据库服务器的毁坏 

介质故障比事务故障和系统故障发生的可能性要小,但破坏性更大,有时是难以恢复的 

四、不一致错误

1、故障导致数据库出现的不一致错误,与系统的数据库读写操作策略有关

2、数据库系统的数据读写

在数据库系统中,数据库常驻于非易失性存储器,通常为磁盘。由于读取磁盘的速度相对来说是比较慢的,为了能够加快处理数据的速度,须将事务读取的数据缓存在内存里读取的数据所在的内存区域称为数据库缓冲区,当事务执行时,首先到缓冲区中去读取数据,假设要读取的数据这里用X表示,当数据X不在缓冲区中,则需由缓冲区管理器将数据库中X所在磁盘块的内容由磁盘输入到内存中,即执行input操作,然后数据X被事务读取到事务的私有工作区,即执行read操作,在工作区内完成对数据X的拷贝t的处理,事务可在每一个更新操作后,将t值复制给缓冲区中的数据X,即执行write操作,如果此时数据X不在缓冲区内,也需要首先执行input操作,将数据X从磁盘读入到数据库缓冲区中,数据库缓冲区中的数据更新到磁盘上,也需要由缓冲区执行output操作

因此,为了更好地阐述问题,也为了更好地理解数据库管理系统的实现技术,后续我们将事务中的数据库操作,用对数据库缓冲区的读写操作来表示

3、对于从账户A转账1000元到账户B的转账事务,我们就可以用这样的对缓冲区数据A和B的读写来表达对数据库中账户A和账户B余额的读写操作

4、假设恢复机制采用一种窃取但不强制的缓冲区管理策略,这也是一些DBMS的事务处理机制实际采用的策略

  • 该策略的思想是为了从磁盘上输入事务B所需的数据到内存,需要占用事务A所处理的数据使用的内存空间,就要先将事务A所处理的数据输出到磁盘上,即执行事务A所处理数据的output操作,再执行事务B所需的数据的input操作,此时称事务B窃取事务A的空间
  • 此外,在事务提交后,其他事务可能仍会访问缓冲区中的数据库数据,因此并不要求将事务的更新结果立即反应到磁盘上,即不强制地执行output操作。

至于窃取哪个事务占用的内存空间,以及何时强制执行提交事务所写数据的output操作由缓冲区管理器根据具体的缓冲器置换算法来决定,比如采用一种LRU即最近最久未使用算法

5、当恢复机制采用这种窃取不强制的缓冲区管理策略

  • 就会出现在事务提交之前,事务的部分执行结果可能已被更新到磁盘上的数据库中
  • 而事务提交后,事务的执行结果并没有立即更新到磁盘上的数据库中

6、这样就导致在发生事务故障后

  • 事务不能正常提交,但夭折的事务的部分执行结果可能已对数据库进行了更新。事务没有保持原子性

 7、在发生系统故障后

  • 在发生系统故障后,除了夭折的事务的部分执行结果可能已经写入磁盘上的数据库,有些已提交的事务对数据库的更新结果可能有一部分甚至全部还在缓冲区中,尚未写回到磁盘上的数据库中事务没有保持持久性

8、在发生介质故障后

  • 不仅影响正在存取磁盘上数据库的所有运行事务,使得这些事务夭折,更主要会破坏磁盘上的数据库,使已提交的事务对数据库的更新结果丢失,事务不能保持持久性

因此,当数据库系统发生故障后,数据库可能会出现这三种错误现象,处于暂时的不一致错误状态,破坏了事务的原子性和持久性 

五、小结

1、事务处理的恢复机制,就是要在数据库系统发生各类故障后,对于可能处于不一致错误状态的数据库采取一定的恢复技术并运用相关的恢复策略,来保持事务的原子性和持久性,将数据库恢复到一个一致性状态

2、不同的DBMS的事务处理机制所采用的缓冲区管理策略可能不同,发生故障后的数据库不一致错误也会不同恢复技术和恢复策略的具体实现也会有所不同 

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

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

相关文章

Pytest--安装与入门

pytest是一个能够简化成测试系统构建、方便测试规模扩展的框架,它让测试变得更具表现力和可读性–模版代码不再是必需的。只需要几分钟的时间,就可以对你的应用开始一个简单的单元测试或者复杂的功能测试。 1. 安装pytest pip install -U pytest检查版…

MaxKB开源知识库问答系统发布v1.3.0版本,新增强大的工作流引擎

2024年4月12日,1Panel开源项目组正式发布官方开源子项目——MaxKB开源知识库问答系统(github.com/1Panel-dev/MaxKB)。MaxKB开源项目发布后迅速获得了社区用户的认可,成功登顶GitHub Trending趋势榜主榜。 截至2024年7月4日&…

【Mathematica14.0】快速从下载安装到使用

目录 1.简介 2.下载安装 下载 安装 3.一小时掌握mathematica使用 单元模式 内置函数 符号表达式 迭代器 赋值 通配符及查找替换 函数定义 匿名函数(拉姆达表达式) 函数映射 函数式与运算符 函数自定义选项 图形可视化 交互式界面 数值…

【ROS2】Ubuntu 24.04 源码编译安装 Jazzy Jalisco

目录 系统要求 系统设置 设置区域启用所需的存储库安装开发工具 构建 ROS 2 获取 ROS 2 代码使用 rosdep 安装依赖项安装额外的 RMW 实现(可选)在工作区构建代码 设置环境 尝试一些例子 下一步 备用编译器 Clang保持最新状态 故障排除 卸载 系统要求 当前…

长沙(市场调研公司)源点 企业如何决定是否需要开展市场调研?

长沙源点调研咨询认为:对于一个特定问题,管理者在面临几种解决问题的方案时,不应该凭直觉草率开展应用性市场调研。事实上,首先需要做的决策是是否需要开展调研。在下述情况下,最好不要做调研: *缺乏资源。…

查询工资级别的个数>20的个数,并且按工贷级别降序

SELECT COUNT(*), grade_level FROM employees e JOIN job_grades g ON e.salary BETWEEN g.lowest_sal AND g.highest_sal GROUP BY grade_level HAVING COUNT(*) > 20 ORDER BY grade_level DESC; 为什么需要GROUP BY而不是仅仅ORDER BY? 聚合数据&#xff1a…

【ARMv8/v9 GIC 系列 5.1 -- GIC GICD_CTRL Enable 1 of N Wakeup Function】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 GIC Enable 1 of N Wakeup Function基本原理工作机制配置方式应用场景小结GIC Enable 1 of N Wakeup Function 在ARM GICv3(Generic Interrupt Controller第三代)规范中,引入了一个名为"Enable 1 of N Wakeup"的功能。…

SQLyog脚本无限试用重置脚本

文章目录 引言脚本(win)必要操作、说明 引言 SQLyog 需要po jie,但是网上的没看到很好使的,直接下的官方。能处理14天试用也是很ok的。 脚本(win) echo offREM SQLyog注册表key,可能跟你的不一样,如果不一样,请替换…

Another Redis Desktop Manager工具自定义解析数据

自定义解析数据,支持多种程序终端输出 /Users/admin/go/src/baobao_all/ws_server/baobao/main_test/encipher_tool_redis/redis_tool {VALUE}/bin/bash -c "/Users/admin/Downloads/redis_tool {VALUE}"写个go程序解析数据 package mainimport ("encoding/jso…

鸿蒙:1.入门

概述 简介 鸿蒙操作系统(HarmonyOS)是华为公司发布的一款智能终端系统,是基于微内核的面向全场景的分布式操作系统。它致力于提供更加安全、高效、低延迟、低功耗的操作体验,可通过技术手段对应用程序和设备进行智能协同&#xf…

每日复盘-20240705

今日关注: 20240705 六日涨幅最大: ------1--------300391--------- 长药控股 五日涨幅最大: ------1--------300391--------- 长药控股 四日涨幅最大: ------1--------300391--------- 长药控股 三日涨幅最大: ------1--------300391--------- 长药控股 二日涨幅最…

Windows的管理工具

任务计划程序:这是一个用来安排任务自动运行的工具。你可以在这里创建新的任务,设定触发条件,并指定任务的操作。 事件查看器:这是一套日志记录和分析工具,,你可以了解到系统的工作状况,帮助诊…

React+TS 从零开始教程(4):useEffect

上一节传送门:ReactTS 从零开始教程(3):useState 源码链接:https://pan.quark.cn/s/c6fbc31dcb02 上一节,我们已经学会了React的第一个Hook:useState。 这一节,我们要学习的是另一…

房屋租赁管理小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,中介管理,房屋信息管理,房屋类型管理,租房订单管理,租房信息管理 微信端账号功能包括:系统首页,房屋信息&am…

手写SpringMVC之调度器DispatcherServlet

DispatcherServlet:分发、调度 根据上一节,已经实现了将controller的方法添加到容器中,而DispatcherServlet的作用就是接收来自客户端的请求,然后通过URI的组合,来找到对应的RequestMapping注解的方法,调用…

JS+CSS+HTML项目-中国国家图书馆

页面做的不多,CSS效果请看哔哩哔哩

SpringBoot整合Dubbo的快速使用教程

目录 一、什么是Dubbo? 二、SpringBoot整合Dubbo 1、父工程引入依赖 2、各个Dubbo服务子模块引入依赖 3、服务提供者 (1)启动类添加注解EnableDubbo (2)服务类添加注解DubboService (3)配置文件…

再有人问你WebSocket为什么牛逼,就把这篇文章发给他!

点赞再看,Java进阶一大半 2008年6月诞生了一个影响计算机世界的通信协议,原先需要二十台计算机资源才能支撑的业务场景,现在只需要一台,这得帮"抠门"老板们省下多少钱,它就是大名鼎鼎的WebSocket协议。很快在…

【数智化人物展】数势科技创始人兼CEO黎科峰:数智化时代To B软件行业面临颠覆与重塑...

黎科峰 本文由数势科技创始人兼CEO黎科峰投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级先锋人物》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 2020年,对我而言,是职业生涯中的一个重大转折点。在全球新…

《后端程序猿 · Caffeine 本地缓存》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻一周,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…