当前位置: 首页 > news >正文

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

一、引言

数据库管理系统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的事务处理机制所采用的缓冲区管理策略可能不同,发生故障后的数据库不一致错误也会不同恢复技术和恢复策略的具体实现也会有所不同 

相关文章:

  • 零知识学习之DPDK与RDMA(3)—— 认识DPDK(3)
  • 阿里云物联网应用层开发:第二部分,云产品流转
  • vue2由mapbox2升级为mapbox3遇到的矢量底图样式丢失问题解决办法
  • 马工程刑法期末复习笔记重点2
  • C++: 左值引用和右值引用
  • 初入Node.js必备知识
  • 安卓请求服务器[根据服务器的内容来更新spinner]
  • 华为5288 V5服务器安装BCLinux8U4手记
  • 电传动无杆飞机牵引车交付用户
  • 如何找BMS算法、BMS软件的实习
  • CentOS8换源
  • spdlog一个非常好用的C++日志库(四): 源码分析之logger类
  • 防爆巡检终端在石化工厂安全保障中的应用
  • 图像的像素在内存中的存储方式
  • 【Unity navmeshaggent 组件】
  • JavaScript-如何实现克隆(clone)函数
  • es6(二):字符串的扩展
  • Java 网络编程(2):UDP 的使用
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • js中的正则表达式入门
  • Kibana配置logstash,报表一体化
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Vim 折腾记
  • vue-loader 源码解析系列之 selector
  • 解析 Webpack中import、require、按需加载的执行过程
  • 数组的操作
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 阿里云API、SDK和CLI应用实践方案
  • 湖北分布式智能数据采集方法有哪些?
  • ​LeetCode解法汇总518. 零钱兑换 II
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #define
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)丶RabbitMQ的六大核心
  • (十六)Flask之蓝图
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转) Face-Resources
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 指南:抽象化实现的基类
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • :中兴通讯为何成功
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ Linux ] Linux信号概述 信号的产生
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [20150629]简单的加密连接.txt
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [C#基础知识系列]专题十七:深入理解动态类型