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

news2025/2/26 6:33:04

一、引言

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

恢复技术主要包括

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

二、日志

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操作语句来得到全备份或增量备份。该语句可对单个数据文件进行转储

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

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

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

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

四、小结

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机械行业常见问题及ERP解决办法

机械行业在全球经济一体化和技术进步背景下,面临着越来越多的挑战。为了在激烈的市场竞争中立于不败之地,企业需要找到合适的方法优化生产流程、降低成本、提升客户满意度。因此,有效地利用企业资源规划(ERP)解决方案变…

isidentifier()方法——判断字符串是否为合法的Python标识符或变量名

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isidentifier()方法用于判断字符串是否是有效的Python标识符,还可以用来判断变量名是否合法。isidentifier()方法的语法格式如…

JAVA妇产科专科电子病历系统源码,前端框架:Vue,ElementUI

JAVA妇产科专科电子病历系统源码,前端框架:Vue,ElementUI孕产妇健康管理信息管理系统是一种将孕产妇健康管理信息进行集中管理和存储的系统。通过建立该系统,有助于提高孕产妇健康管理的效率和质量,减少医疗事故发生的…

IDEA2024 Ctrl+Alt+L 格式化代码快捷键失效的解决办法及如何使用OpenArk查询电脑的所有快捷键解决快捷键冲突问题。

今天用Idea2024发现格式化代码的快捷键CtrlAltL失效了,最开始是去idea里面的设置那检查,发现没有问题。 然后就考虑是不是快捷键冲突了,最后发现是qq的热键冲突,关掉qq的就好了。 上网查询还有个可能是网易云的快捷键冲突 如果没…

crewAI实践过程中,memory规避openai的使用方法以及(windows下xinferece框架使用踩过的坑)

问题: 在使用crewAI开发项目的过程中,memory开启后报错:openai key is fake 经代码核查,其默认使用了openai的embedding模型。 解决方法 经查阅资料,可以参考其本地部署llm的方法。 本地部署模型可以使用xinference…

【面试题】TLS和SSL协议的区别

TLS(Transport Layer Security)和SSL(Secure Sockets Layer)协议都是用于在网络上建立安全通信连接的协议,但它们在多个方面存在区别。以下是TLS和SSL协议之间区别的详细分析: 1. 发展历程与标准化 SSL&a…

苹果电脑废纸篓数据被清空了,有什么方法可以恢复吗?

使用电脑的用户都知道,被删除的文件一般都会经过回收站,想要恢复它直接点击“还原”就可以恢复到原始位置。mac电脑同理也是这样,但是“回收站”在mac电脑显示为“废纸篓”。 苹果电脑废纸篓数据被清空了,有什么方法可以恢复吗&am…

CVE-2024-0603 漏洞复现

CVE-2024-0603 源码:https://gitee.com/dazensun/zhicms 开题: CVE-2024-0603描述:ZhiCms up to 4.0版本的文件app/plug/controller/giftcontroller.php中存在一处未知漏洞。攻击者可以通过篡改参数mylike触发反序列化,从而远程…

WPF UI 3D 基本概念 点线三角面 相机对象 材质对象与贴图 3D地球 光源 变形处理 动作交互 辅助交互插件 系列三

WPF UI交互专题 平面图形 Path Drawing 绘图 渐变 Brush 矩阵 Transform 变形 阴影效果 模糊效果 自定义灰度去色效果 系列二-CSDN博客 1软件中的3D基本概念 WPF 中 3D 功能的设计初衷并非提供功能齐全的游戏开发平台。 WPF 中的 3D 图形内容封装在 Viewport3D 元素中&#x…

【面试系列】机器学习工程师高频面试题及详细解答

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…

ubuntu安装miniconda、jupyer、ros2

miniconda: 类似于虚拟机 ,可以安装不同版本的python jupyer: python执行、调试命令工具 1.下载安装文件 wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh 2.安装minconda bash https://repo.anaconda.com/miniconda/Miniconda3-py…

PO模式登录测试

项目实践 登陆项目测试 get_driver import page from selenium import webdriverclass GetDriver:driver Noneclassmethoddef get_driver(cls):if cls.driver is None:cls.driver webdriver.Edge()cls.driver.maximize_window()cls.driver.get(page.url)return cls.drivercl…

gin框架 gin.Context中的Abort方法使用注意事项 - gin框架中立刻中断当前请求的方法

gin框架上下文中的Abort序列方法(Abort,AbortWithStatus, AbortWithStatusJSON,AbortWithError)他们都不会立刻终止当前的请求,在中间件中调用Abort方法后中间件中的后续的代码会被继续执行,但是…

Spring之spring的单例bean是线程安全的吗

Spring单例bean是线程安全的吗? 不是线程安全的。 1、Bean的作用域 Service Scope("singleton") public class UserServiceImpl implements UserService{ } singleton (默认):bean在每个Spring IOC容器中只有一个实例…

【有为己之心方能克己】

私欲会让人难受,为了自己舒服而去拔除,去除私欲小我,就可以为自己展现大我 “人不为己天诛地灭”,其实这句话不是自私自利的意思, 原意是:人如果不修为自己,不为那个真己而活,不活出…

LSH算法:高效相似性搜索的原理与Python实现I

局部敏感哈希(LSH)技术是快速近似最近邻(ANN)搜索中的一个关键方法,广泛应用于实现高效且准确的相似性搜索。这项技术对于许多全球知名的大型科技公司来说是不可或缺的,包括谷歌、Netflix、亚马逊、Spotify…

【工具】VS Code使用global插件实现代码跳转

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:善假于物&#…

干货分享:代理IP的10大误区

在当今的数字时代,代理已成为在线环境不可或缺的一部分。它们的用途广泛,从增强在线隐私到绕过地理限制。然而,尽管代理无处不在,但仍存在许多围绕代理的误解。在本博客中,我们将探讨和消除一些最常见的代理误解&#…

EcoVadis评分标准是什么?

EcoVadis评分标准是一个综合性的评估体系,旨在评估公司在环境、社会、商业道德和可持续采购等方面的表现,以帮助企业提高可持续发展的能力。其评分标准可以根据不同的评级进行细分,以下是详细的评分标准: 评分等级与分数范围&…

comfyui定制

🌟 comfyui定制AI人工智能公司— 触站AI,绘制智能图像新纪元 🎨 🚀AI绘画,触站AI引领创新潮流 🚀深圳,这座创新之城,迎来了触站AI,一家专注于企业AI图像领域的技术解决方…