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

恢复策略(上)-撤销事务(UNDO)、重做事务(REDO)

一、引言

利用前面所建立的冗余数据,即日志和数据库备份,要将数据库从一个不一致的错误状态恢复到一个一致性状态,还需要相关的恢复策略,不同DBMS的事务处理机制所采用的缓冲区管理策略可能不同,发生故障后的数据库不一致错误和状态也会不同,恢复技术和恢复策略的具体实现也会有所不同,假设恢复机制仍采用我们前面讨论的窃取但不强制的缓冲区管理策略,那么当数据库系统发生故障后,就可能会出现

不一致错误

  • 夭折的事务的部分执行结果已对数据库进行了更新,破坏了事务的原子性
  • 已提交的事务对数据库的更新结果不能保存在磁盘上,破坏了事务的持久性,导致数据库处于不一致错误状态

恢复机制要做的就是利用日志来撤销夭折事务来保持事务的原子性重做已提交事务来保持事务的持久性,再利用转储的数据库备份采用一定的恢复策略或算法来将数据库恢复到发生故障前的某个一致性状态

二、撤销事务(UNDO)

对于夭折事务的部分执行结果已对数据库进行了更新这种不一致错误,为保持事务的原子性,应撤销该事务所产生的更新,即对该事务进行UNDO操作

对于从账户A转账1000元到账户B的转账事务,转账前A的账户余额为1500元,账户B的余额为0,事务在执行完对账户A的更新后,可能会因故障导致事务不能继续执行,但对账户A的更新结果,却已写到磁盘中去了,即账户A的值已被改为500元,但账户B的值仍为0元。

或者事务在执行完对账户B的更新后,也可能会因故障导致事务不能提交,而对账户A和账户B的更新结果却都已写入磁盘中去了,即账户A的值已改为500元,账户B的值已为1000元 

以上更新操作相应的更新日志记录已先写入磁盘的日志中

对于该夭折事务,事务的原子性要求夭折事务必须回滚,相当于事务没有执行,这里事务的强制回滚,就是要对事务进行撤销操作,即UNDO操作

恢复机制对事务进行的UNDO操作就是利用日志撤销此事务已对数据库进行的更新,将更新前的旧值重新写会磁盘的数据库中,使得该事务好像根本没有执行一样,保持了事务的原子性,使得事务以ROLLBACK方式结束

对于银行转账事务,UNDO操作就是根据系统产生的日志记录,将事务对账户A和账户B更新前的值重新写回到磁盘中去,即账户A的值改回为1500元,账户B的值改回为0元

三、重做事务(REDO)

而对于已提交的事务对数据库的更新结果尚未写回到磁盘上的数据库中这种不一致错误,为保持事务的持久性,应重做该事务所产生的更新,即对该事务进行REDO操作

对于从账户A转账1000元到账户B的转账事务,事务在执行完对账户A和账户B的更新后进行了提交操作,但事务提交后,事务对数据库的更新结果还没有及时地写到磁盘的数据库中,还在内存的数据库缓冲区里,若此时系统发生故障,会使缓冲区中数据丢失 。对于该提交事务,事务的持久性要求,事务对数据库的更新应持久地保存在数据库中,恢复机制要对该事务进行REDO操作,就是利用日志重新执行此事务已对数据库进行的更新,将更新后的新值写入磁盘的数据库中,保持该事务的持久性,使得事务以COMMIT方式结束

对于银行转账事务,REDO操作就是根据系统产生的日志记录,将事务对账户A和账户B的更新后的值写到磁盘中去,即账户A的值改为500元,账户B的值改为1000元 

相关文章:

恢复策略(上)-撤销事务(UNDO)、重做事务(REDO)

一、引言 利用前面所建立的冗余数据,即日志和数据库备份,要将数据库从一个不一致的错误状态恢复到一个一致性状态,还需要相关的恢复策略,不同DBMS的事务处理机制所采用的缓冲区管理策略可能不同,发生故障后的数据库不…...

【鸿蒙学习笔记】位置设置

官方文档:位置设置 目录标题 align:子元素的对齐方式direction:官方文档没懂,看图理解吧 align:子元素的对齐方式 Stack() {Text(TopStart)}.width(90%).height(50).backgroundColor(0xFFE4C4).align(Alignment.TopS…...

41.HOOK引擎设计原理

上一个内容:41.HOOK引擎设计原理 在一个游戏里通过hook来完成各种各样的功能,比如hook点是a、b、c,然后a点会有它自己所需要的hook逻辑,b、c也是有它们自己的hook逻辑(hook逻辑指的是hook之后要做的事)&am…...

STM32启动流程 和 map文件的作用

一,启动流程 1. 复位/上电 2. 根据 BOOT0/BOOT1 确定程序从哪个存储位置执行 3. 初始化 SP 及 PC 指针 将 0X08000000 位置的栈顶地址存放在 SP 指针中 将 0x08000004 位置存放的向量地址装入 PC 程序计数器 4. 初始化系统时钟 5. 初始化用户堆栈 6. 进入main函数 二…...

深度解析华为仓颉语言

什么是华为仓颉语言? 华为仓颉语言(Huawei Cangjie Language,HCL)是华为公司推出的一种新型编程语言,旨在解决大规模分布式系统开发中的复杂性问题。仓颉语言以高效、简洁和易用为设计目标,特别适用于云计…...

Android简介-历史、API等级与体系结构

1. Android简介 Android是一种基于Linux内核的自由及开放源代码的操作系统。最初是由安迪鲁宾(Andy Rubin)开发的一款相机操作系统。2005年8月被Google收购。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。…...

SpringBoot:使用Spring Batch实现批处理任务

引言 在企业级应用中,批处理任务是不可或缺的一部分。它们通常用于处理大量数据,如数据迁移、数据清洗、生成报告等。Spring Batch是Spring框架的一部分,专为批处理任务设计,提供了简化的配置和强大的功能。本文将介绍如何使用Spr…...

用JQueryUI库在.net MVC中配置datepicker(时间日期控件)

原文参考&#xff1a;如何在MVC中添加jQuery Datepicker_mvc datepicker-CSDN博客 好文章被埋没了&#xff0c;可能和时间发的早有关。 1.首先我们引入JQuery和JQuery UI <!-- ... --> <link rel"stylesheet" href"https://code.jquery.com/ui/1.12…...

算法:链表

目录 链表的技巧和操作总结 常用技巧&#xff1a; 链表中的常用操作 题目一&#xff1a;反转一个单链表 题目二&#xff1a;链表的中间结点 题目三&#xff1a;返回倒数第k个结点 题目四&#xff1a;合并两个有序链表 题目五&#xff1a;移除链表元素 题目六&#xff…...

Redis基础教程(一):redis配置

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…...

短视频矩阵系统:打造品牌影响力的新方式

一、短视频矩阵概念 短视频营销革命&#xff1a;一站式解决策略&#xff01;短视频矩阵系统是一款专为企业营销设计的高效工具&#xff0c;旨在通过整合和优化众多短视频平台资源&#xff0c;为企业呈现一个全面的短视频营销策略。该系统致力于协助企业以迅速且高效的方式制作…...

品牌推广的三个阶段与核心内容,一篇文章全掌握!

在竞争激烈的市场环境中&#xff0c;品牌推广是企业成功的关键。精心策划的推广策略能够帮助企业在消费者心中树立独特的品牌形象&#xff0c;进而促进销售增长。 作为一家手工酸奶品牌的创始人&#xff0c;目前全国也复制了100多家门店&#xff0c;我理解的品牌推广分为3个阶…...

队列与循环队列

目录 1. 前言&#xff1a; 2. 队列 2.1 队列的概念 2.2 队列的实现 2.3 队列的声明 2.4 队列的初始化 2.5 队列的入队 2.6 队列的出队 2.7 队列获取队头元素 2.8 队列获取队尾元素 2.9 队列获取有效数据个数 2.10 队列判断是否为空 2.11 打印队列 2.12 销毁队列 …...

python基础问题记录

文章目录 前言一、python中类的注意点二、模块与包1. 模块2. 包 总结 前言 本专栏主要记录python中一些语法问题。 一、python中类的注意点 类属性&#xff1a;在类中定义的属性 在类中直接写明的变量是类属性&#xff0c;属于公共属性。 访问&#xff1a;类属性可以通过类或…...

Qt之饼图(Pie Graph)

[TOC](Qt之饼图(Pie Graph)) 饼图名为Pie Graph&#xff0c;用于显示一个数据系列中各项的大小与各项总和的比例。本文基于QtCharts实现饼图的显示。 1.实现过程 1.1环境配置 &#xff08;1&#xff09;首先想要使用QtCharts模块&#xff0c;需要在安装qt时选择勾选安装QtCha…...

Java项目Git提交规范

在Java项目中&#xff0c;遵循良好的Git提交规范有助于提高代码的可维护性、可读性和团队协作效率。以下是一些常见的Git提交规范建议&#xff1a; 文章目录 提交信息格式提交信息示例提交频率分支管理代码审查工具和自动化提交前检查清单 提交信息格式 提交类型&#xff1a;使…...

flink-触发器Trigger和移除器Evictor

窗口原理与机制 图片链接&#xff1a;https://blog.csdn.net/qq_35590459/article/details/132177154 数据流进入算子前&#xff0c;被提交给WindowAssigner&#xff0c;决定元素被放到哪个或哪些窗口&#xff0c;同时可能会创建新窗口或者合并旧的窗口。每一个窗口都拥有一个…...

【力扣 28】找出字符串中第一个匹配项的下标 C++题解(字符串匹配)

给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入&#xff1a;haystack “s…...

软件构造 | Design Patterns for Reuse and Maintainability

Design Patterns for Reuse and Maintainability &#xff08;面向可复用性和可维护性的设计模式&#xff09; Open-Closed Principle (OCP) ——对扩展的开放&#xff0c;对修改已有代码的封 Why reusable design patterns A design… …enables flexibility to change …...

Python数据分析-股票分析和可视化(深证指数)

一、内容简介 股市指数作为衡量股市整体表现的重要工具&#xff0c;不仅反映了市场的即时状态&#xff0c;也提供了经济健康状况的关键信号。在全球经济体系中&#xff0c;股市指数被广泛用于预测经济活动&#xff0c;评估投资环境&#xff0c;以及制定财政和货币政策。在中国…...

Apex Legends进阶指南:结构化训练框架与技能模块化拆解

1. 项目概述&#xff1a;一个面向Apex Legends玩家的成长型技能库如果你是一位《Apex Legends》的玩家&#xff0c;并且对提升自己的游戏水平有持续的热情&#xff0c;那么你很可能和我一样&#xff0c;经历过一个漫长的摸索期。从最初落地成盒&#xff0c;到逐渐熟悉地图、枪械…...

Onekey:重构Steam Depot清单下载流程的现代化解决方案

Onekey&#xff1a;重构Steam Depot清单下载流程的现代化解决方案 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Onekey作为一款专为Steam Depot清单设计的自动化下载工具&#xff0c;通过其创…...

2026生鲜店收银软件特点功能对比

每天傍晚高峰期&#xff0c;生鲜店门口排起的长队总是让店主心头一紧。顾客手里拿着刚挑好的蔬菜水果&#xff0c;眼神里透着急切&#xff0c;而收银台前的店员却还在手忙脚乱地查找商品代码、手动输入重量&#xff0c;甚至因为系统卡顿导致支付失败。这种场景不仅流失了潜在客…...

轻量级工作流引擎pro-workflow:Go语言实现与实战解析

1. 项目概述&#xff1a;一个为专业开发者量身打造的工作流引擎如果你是一名开发者&#xff0c;尤其是经常需要处理复杂业务逻辑、数据流转或自动化任务的后端或全栈工程师&#xff0c;那么你一定对“工作流”这个概念不陌生。从简单的审批流到复杂的微服务编排&#xff0c;工作…...

AI原生编程语言Reia:为LLM设计的编程范式变革

1. 项目概述&#xff1a;Reia&#xff0c;一个面向未来的AI原生编程语言最近在AI和编程语言交叉领域&#xff0c;一个名为Reia的项目引起了我的注意。它来自Quaint-Studios&#xff0c;定位是“AI原生”的编程语言。这听起来有点抽象&#xff0c;但简单来说&#xff0c;Reia试图…...

开源婚礼技能库:用项目管理思维破解备婚焦虑,打造个性化高性价比婚礼

1. 项目概述&#xff1a;婚礼技能库的诞生与价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“awesome-wedding-skills”。光看名字&#xff0c;你可能会觉得这又是一个普通的“awesome”系列资源列表&#xff0c;无非是收集一些婚礼策划、摄影、化妆的链接。但当我点…...

MySQL高可用与扩展-主从复制读写分离分库分表

当单库压力越来越大时&#xff0c;常见演进路线是先做主从复制&#xff0c;再做读写分离&#xff1b;如果数据量和写入压力继续增长&#xff0c;就需要考虑分库分表。 这三者解决的问题不同&#xff1a;方案主要解决什么主从复制数据冗余、读扩展、故障切换基础读写分离缓解读请…...

【ElevenLabs匈牙利语音实战指南】:2024最新API调用、音色微调与本地化合规避坑全解析

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs匈牙利语音支持概览与本地化价值定位 ElevenLabs 自 2024 年 3 月起正式引入匈牙利语&#xff08;hu-HU&#xff09;语音合成支持&#xff0c;成为其首批覆盖的中东欧语言之一。该能力依托于…...

3D打印印章模具全攻略:从数字设计到硅胶翻模的实践指南

1. 项目概述&#xff1a;当3D打印遇上传统印章艺术我一直对融合数字制造与传统手工艺的项目特别着迷&#xff0c;最近花了不少时间折腾用3D打印模具来制作定制印章&#xff0c;整个过程就像在数字世界和物理世界之间架起了一座桥。简单来说&#xff0c;这个项目的核心思路是&am…...

云端生信分析:从零部署RStudio Server避坑指南

1. 为什么需要云端RStudio Server&#xff1f; 做生物信息分析的朋友们肯定深有体会&#xff0c;单细胞测序、转录组这些数据动辄几十GB&#xff0c;用自己电脑跑分析简直是折磨。我去年处理一个肝癌单细胞项目时&#xff0c;光是读取数据就卡了半小时&#xff0c;更别说后续的…...