恢复的实现技术-日志和数据转储

一、引言

在系统正常运行的情况下,事务处理的恢复机制采取某些技术措施为恢复做好相应的准备,保证在系统发生故障后,能将数据库从一个不一致的错误状态恢复到一个一致性状态

恢复技术主要包括

  • 生成一个数据库日志,来记录系统中事务的运行情况及事务对数据库的更新
  • 还有就是对磁盘上的数据进行转储 

二、日志

1、DBMS为系统创建的每一个数据库维护着一个日志,来记录事务对数据库的所有更新操作,可反映每一个时刻数据库的状态变化

2、日志数据库上所有运行事务按时间顺序产生的日志记录序列,日志内容不能由用户进行修改和删除

3、不同DBMS采用的日志记录格式并不完全一样,基本包含如下几种类型的日志记录

日志记录内容

  • 【start_transactionn,T】:事务T开始执行
  • 【commit,T】:事务T成功完成
  • 【abort,T】:事务T异常中止
  • 【write,T,X,旧值,新值】:事务T将数据项X的值从旧值改为新值 

每当事务执行时,事务的开始,事务的结束,以及事务对数据库的更新操作信息就被记录到日志里,对于更新操作的日志记录,记录里要包括事务的标识操作的数据对象以及更新前数据的值更新后数据的值来标明是哪个事务对哪个数据对象进行的更新,数据的值可为空值 

为保证日志可用于恢复,把日志记录登记在日志里时必须遵循两条原则

  • 一是由于DBMS可能同时处理多个事务,在日志中登记日志记录的顺序必须严格按各事务中操作执行的时间先后次序

事务T产生的日志记录,可能与其他事务的日志记录相互交错,这里给出一段6个事务中的操作交错执行的日志示意图,其中的Bi代表事务Ti的开始执行日志记录Ci代表事务Ti的成功完成提交日志记录Wi代表事务Ti写数据到缓冲区,即更新数据的日志记录Ai代表事务Ti的异常终止日志记录。每个事务的第一条日志记录都是该事务的开始记录,最后一条日志记录为commit记录或abort记录

  • 另一个登记日志记录的原则是在把数据的更新的结果写入到磁盘数据库之前,记录这个更新的对应日志记录必须先写入日志中。

数据的更新结果和新产生的日志记录首先都存储在内存的缓冲区内,把数据的更新结果写入磁盘数据库和把记录这个更新的对应日志记录写入日志中是两个输出操作,有可能在这两个操作之间发生故障。如果先进行了数据更新,假如将数据项X由3更新为5然后发生系统故障,内存缓冲区内容被刷新,则在日志中并没有登记表示这个更新的日志记录那么后面无法撤销这个更新操作,再将数据项由5改为3了 

DBMS的事务处理的恢复机制必须能实现将日志缓冲区中的日志记录先写到磁盘的日志中,并且要保证磁盘上的日志的可靠存储

三、数据转储

1、日志可以提供事务故障和系统故障后的数据恢复保障,为了在发生介质故障造成磁盘上的数据丢失时数据库也能进行恢复,通常还要采用数据转储技术

2、数据转储数据库管理员DBA定期地在某种存储介质如磁盘或光盘等创建一个与数据库分离的数据库备份并把备份存放在安全可靠的地方,这些数据库备份简称为备份,也称后备副本等

3、备份保存数据库在转储时的数据库状态。

4、转储是一个冗长的过程,十分耗费时间和资源,不能频繁进行,DBA应该根据数据库使用情况确定一个适当的转储方式和转储周期,比如根据转储时系统状态的不同,转储可分为静态转储和动态转储

如果有可能暂时关闭数据库系统,可以进行静态转储,静态转储是在在系统中无运行事务时进行的,也就是要等待正在运行的用户事务结束,新的事务必须等待转储结束才能开始执行,因此转储期间没有对数据库的存取或更新操作,也不会产生日志记录

  • 静态转储最大的优点是能够得到一个与转储时的数据库相一致的备份
  • 但会降低数据库系统的运行效率 

因有的转储可能要几个小时,而大多数数据库系统不能在转储所需要的一段时间内关闭,因此需要进行动态转储,动态转储与用户事务可以并行,转储期间允许事务对数据库进行存取或更新

  • 动态转储可以克服静态转储的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的执行
  • 但是在动态转储的过程中,系统中的运行事务可能会更新磁盘上的数据库中的数据,转储到备份上的数据库可能会包含未提交事务的中间执行结果,是数据库处于某个不一致状态时的值,得到的备份可能不是数据库某个一致性状态的备份 

5、根据转储的备份,转储可分为完全转储和增量转储

  • 完全转储在每次转储时都复制整个数据库,每次备份的数据量大,时间长
  • 增量转储只需要复制上次转储后更新过的数据,每次备份的数据量小,时间短

数据库以数据文件和日志文件的形式存储在磁盘介质上,数据转储就是要得到这些磁盘文件的备份

 

例如SQL Server支持的T-SQL语言提供可完成对数据库进行完全存储增量转储BACKUP操作语句来得到全备份或增量备份。该语句可对单个数据文件进行转储

也可对包括多个数据文件的文件组进行转储

可对事务日志进行转储得到上一次完全转储后生成的新日志备份,需指定备份所在的存储路径和物理存储文件,

可指定进行数据文件的完全转储还是增量转储,

每次增量转储得到的是上一次完全转储后的增量备份、系统生成的活动日志以及转储得到的数据库全备份,增量备份和日志备份构成的数据库备份均是为数据库产生的冗余数据,利用这些冗余数据才能在发生故障后将数据库从一个不一致的错误状态恢复到一个一致性状态

四、小结

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发中用到的自定义UI库

文章目录 前言cell 左右滑动菜单日历组件仿QQ 侧滑抽屉仿探探、陌陌的卡牌滑动库头部缩放视图自定义UITabbar刮刮乐广告横幅 前言 本文中的UI组件,是作者在移动应用开发中都用到过的。 确实,找到对的三方库可以快速帮助我们构建App, 极大程度上提高了生…

ESP32-C2模组数据透传模式配置详细教程

文章目录 1. 背景2. 关键步骤2.1 烧录AT指令固件2.2 配置透传模式2.3 如何退出透传模式重新配置3. 思考1. 背景 最近做的项目中,有蓝牙+WIFI的数据透传的需求,即系统A和系统B之间的通讯通过无线的方式,其实在实际项目中有很多这种场景比如无线调试手柄、无线数据终端、无线…

c进阶篇(一):数据的存储

1.数据类型介绍 char // 字符数据类型 short // 短整型 int // 整形 long // 长整型 long long // 更长的整形 float // 单精度浮点数 double // 双精度浮点数 1.1整形家族: char unsigned char signed char …

Linux 生产消费者模型

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:Linux初窥门径⏪   🚚代码仓库:Linux代码练习🚚   🌹关注我🫵带你学习更多Linux知识   🔝 前言 1. 生产消费者模型 1.1 什么是生产消…

stm32学习笔记---ADC模数转换器(代码部分)AD单通道/多通道

目录 第一个代码:AD单通道 ADC初始化步骤 ADC相关的库函数 RCC_ADCCLKConfig 三个初始化相关函数 ADC_Cmd ADC_DMACmd ADC_ITConfig 四个校准相关函数 ADC_SoftwareStartConvCmd ADC_GetSoftwareStartConvStatus ADC_GetFlagStatus ADC_RegularChannel…

探索 Electron:将 Web 技术带入桌面应用

Electron是一个开源的桌面应用程序开发框架,它允许开发者使用Web技术(如 HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序,它的出现极大地简化了桌面应用程序的开发流程,让更多的开发者能够利用已有的 Web 开发技能…

iOS17系统适配

iOS17 新功能 文章目录 iOS17 新功能iOS17支持哪几款机型Xcode15新特性iOS17-开发适配指南 横屏待机 在iOS 17中,还带来了横屏待机功能,苹果将这个新功能命名为“Standby”模式,为 iPhone 带来了全新的玩法。iPhone启用之后,默认情…

文件加密|电脑文件夹怎么设置密码?5个文件加密软件,新手必看!

电脑文件夹怎么设置密码?您是否希望更好地在电脑上保护您的个人或敏感文件?设置电脑文件夹密码是一种简单而有效的方式来确保你的隐私不被侵犯。通过使用文件加密软件,您可以轻松地为您的文件和文件夹设置密码保护。因此,本文将介…

快速应用开发(RAD):加速软件开发的关键方法

目录 前言1. 快速应用开发的概念1.1 什么是快速应用开发?1.2 RAD与传统开发方法的对比 2. 快速应用开发的实施步骤2.1 需求分析与规划2.2 快速原型开发2.3 用户评估与反馈2.4 迭代开发与改进2.5 最终交付与维护 3. 快速应用开发的优点与应用场景3.1 优点3.2 应用场景…

Python逻辑控制语句 之 判断语句--if elif else 结构(多重判断)

1.if elif else 的介绍 # if elif else 如果 ... 如果 ... 否则 .... # 多个如果之间存在关系 应用场景:在判断条件时, 需要判断 多个条件, 并且对应不同条件要执行 不同的代码 2.if elif else 的语法 if 判断条件1: 判断条件1成立,执行的代码 elif 判…

React@16.x(44)路由v5.x(9)源码(1)- path-to-regexp

目录 1,作用2,实现获取 match 对象2.1,match 对象的内容2.2,注意点2.3,实现 1,作用 之前在介绍 2.3 match 对象 时,提到了 react-router 使用第3方库 path-to-regexp 来匹配路径正则。 我们也…

【漏洞复现】科立讯通信有限公司指挥调度管理平台uploadgps.php存在SQL注入

0x01 产品简介 科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。该产品旨在提供高效的指挥调度和管理解决方案,以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、…

【Android面试八股文】请描述一下Service的生命周期是什么样的?

文章目录 一、Service的生命周期是什么样的?1.1 通过 `startService` 启动的 Service 生命周期:1.1.1 相关方法说明1.1.2 流程1.1.3 总结1.2 通过 bindService 启动的 Service 生命周期1.2.1 相关方法说明1.2.2 流程1.3 生命周期调用1.4 总结一、Service的生命周期是什么样的…

20240629在飞凌开发板OK3588-C上使用Rockchip原厂的SDK跑通I2C扩展GPIO芯片TCA6424ARGJRR

20240629在飞凌开发板OK3588-C上使用Rockchip原厂的SDK跑通I2C扩展GPIO芯片TCA6424ARGJRR 2024/6/29 18:02 1、替换DTS了: Z:\repo_RK3588_Buildroot20240508\kernel\arch\arm64\boot\dts\rockchip viewproviewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot2024…

Unity WebGL项目问题记录

一、资源优化 可通过转换工具配套提供的资源优化工具,将游戏内纹理资源针对webgl导出做优化。 工具入口: 工具介绍 Texture 搜索规则介绍 已开启MipMap: 搜索已开启了MipMap的纹理。 NPOT: 搜索非POT图片。 isReadable: 搜索已开启readable纹理。 …

【机器学习】大模型训练的深入探讨——Fine-tuning技术阐述与Dify平台介绍

目录 引言 Fine-tuning技术的原理阐 预训练模型 迁移学习 模型初始化 模型微调 超参数调整 任务设计 数学模型公式 Dify平台介绍 Dify部署 创建AI 接入大模型api 选择知识库 个人主页链接:东洛的克莱斯韦克-CSDN博客 引言 Fine-tuning技术允许用户根…

Day 48 消息队列集群RabbitMQ

消息队列集群-RabbitMQ 一、消息中间件 中间件 tomcat java web中间件 web容器 mysql php php mysql uwsgi python mysql mycat 数据库中间件 rabbitMQ 消息中间件 1、简介 MQ 全称为(Message Queue消息队列)。是一种应用程序对应用程序的通信方…

Python之父推荐!Star 60k!这本 CPython 书把内部实现全讲透了!

都说 Python 是人工智能的“天选”语言,为什么呢? 可能很多读者都知道,Python 的解释器是用 C 语言写的,所以其实我们在谈论 “Python” 的时候,99.9% 的情况说的就是 “CPython”! CPython 是目前最流行的…

OpenAI推出自我改进AI- CriticGPT

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

学习gateway网关路由时遇到的问题

遇到这个问题先别慌,我们首先要检查是哪里出问题了,从报错信息中我们可以看到,他说 Unable to find GatewayFilterFactory with name -AddRequestHeader 找不到这个路由过滤器,所以导致网关设置失败,从这条信息上我…