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

一、引言

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

相关推荐
天天要nx12 分钟前
D64【python 接口自动化学习】- python基础之数据库
数据库·python
精进攻城狮@1 小时前
Redis(value的数据类型)
数据库·redis
爪哇学长1 小时前
SQL 注入详解:原理、危害与防范措施
xml·java·数据库·sql·oracle
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
mybatisPlus打印sql配置
数据库·sql
弗拉唐1 小时前
将Excel文件的两个表格经过验证后分别读取到Excel表和数据库
数据库·excel
刘艳兵的学习博客2 小时前
刘艳兵-DBA033-如下那种应用场景符合Oracle ROWID存储规则?
服务器·数据库·oracle·面试·刘艳兵
simpleGq2 小时前
Redis知识点整理 - 脑图
数据库·redis·缓存
NiNg_1_2342 小时前
关系型数据库和非关系型数据库详解
数据库·oracle·nosql
paopaokaka_luck2 小时前
基于Spring Boot+Vue的多媒体素材管理系统的设计与实现
java·数据库·vue.js·spring boot·后端·算法
python资深爱好者2 小时前
NoSQL数据库与关系型数据库的主要区别
数据库·oracle·nosql