精华内容
下载资源
问答
  • 数据库撤销和重做
    2021-03-10 04:20:53

    我会像这样解决.基本上会有三个列表.

    >具有实际值的列表

    >撤销具有Command接口实例的列表

    >具有Command接口实例的重做列表(可选,下面说明)

    public interface Command {

    void do();

    void undo();

    }

    将有两个Command实现:AddCommand和RemoveCommand.

    >在add()中,AddCommand的新实例创建并添加到撤消列表中.然后我们调用这个命令的do(),它修改实际值并存储添加项的索引.

    >在remove()中,创建并添加到撤销列表中的RemoveCommand的新实例.然后我们调用这个命令的do(),它修改实际值并存储已删除项的索引和值.

    > undo()我们从undo列表中拉取最后一个命令,并执行该命令的undo()方法.该命令推送到重做列表. AddCommand和RemoveCommand的撤消方法可以恢复更改.

    >重做()我们从重做列表中拉出最后一个命令,并再次执行do()方法. Pulled命令被添加到撤消列表.

    另一个优化是删除重做列表,并使用undo index.在这种情况下,当您撤消()时,您不需要从列表中删除/添加值,而只需将undo索引减1.类似地,redo()会增加一个.

    因此,最终解决方案将具有值列表,撤销列表和索引值.

    更新:

    对于最简单的情况,只需要一个undo()/ redo()操作,解决方案看起来会更加简单.而不是具有撤消列表和索引,它足以存储最新的命令实例.因此,我们将有一个值列表和最后一个undo命令的实例.

    更多相关内容
  • 数据库 重做undo回滚rollback

    千次阅读 多人点赞 2019-12-23 22:12:01
    撤销:恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已经做出的任何对数据库的修改,使得该事务好像根本没有启动一样。(在提交之后执行) 根据上述书中的解释可以明白二者主要区别在于...

    概念:

    1. 回滚:即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,滚回到事务开始时的状态。(需要在提交之前执行)
    2. 撤销:恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已经做出的任何对数据库的修改,使得该事务好像根本没有启动一样。(在提交之后执行)
    3. 根据上述书中的解释可以明白二者主要区别在于事务执行的状态,回滚是在事务未全部完成即在事务中发生的,撤销是在该事务已经执行完成后发生的,不过二者都是为解决事务故障而存在的一种安全机制。

    经典习题

    在这里插入图片描述

    答案

    在这里插入图片描述
    第一大问比较好做,主要理解一句话:在系统故障发生之前已提交数据的事物重做,其他事务回滚

    第二问,重做的就按步骤重做,后面的赋值会覆盖之前的赋值,回滚的就到初始状态0
    在这里插入图片描述

    展开全文
  • 重做日志文件时为了数据库恢复的物理文件,其中保存了数据库的变更操作信息。 一、概述 重做日志文件(Redo Logfile)又被称为事务日志文件(Transaction Logfile)。 它对ORACLE数据库来说至关重要。ORACLE中每执行一条...

    重做日志文件

    重做日志文件时为了数据库恢复的物理文件,其中保存了数据库的变更操作信息。

    一、概述

    重做日志文件(Redo Logfile)又被称为事务日志文件(Transaction Logfile)。

    它对ORACLE数据库来说至关重要。ORACLE中每执行一条更新操作时,都会引起数据库的变化,因此都会生成一定数量的重做日志,他们将被记录到重做日志文件中。以便在数据库出现例程失败或介质故障时,可以利用重做日志文件来恢复数据库

    重做日志文件是ORACLE三类文件中最为复杂的一类。在ORACLE 10G安装完毕后,会自动创建3个重做日志文件。

    1. 重做日志文件主要以重做记录的形式记录、保存对数据库所作的修改(或事务)

    2. 如果在一段时间内只对数据库进行了查询操作,则不产生重做日志记录信息。

    3. 如果对一个表的数据进行了修改,并完成了事务的提交,这时数据文件只存储修改后的数据,但重做日志文件中要记录两类数据:

      1. 一类是修改前的数据;
      2. 一类是修改后的数据。

      所以重做日志文件的管理方式与数据文件的管理方式有所不同

    二、作用与目的

    重做日志文件在数据库的恢复过程中起着非常重要的作用,可以用来进行例程和介质恢复(其中介质恢复需要借助于归档日志文件),以及事务的撤销。

    • 重做日志文件是为了数据库恢复的物理文件,其中保存了数据库的变更操作信息。
    • 通过重做日志文件通常是通过重做(REDO)或者是回退(UNDO)实现的。
    • 重做(REDO)就是有些原因到导致事务对数据库的操作的修改在写入数据文件之前丢失了,此时就可以利用重做日志文件做该事务对数据库的变更。
    • 回退(UNDO)如果用户在事务提交之前想回滚事务,那么可以利用重做日志文件撤销事务对数据库所做的变更。

    三、工作原理

    重做日志文件记录所有对数据的改变,并提供由系统或媒体失败带来的恢复机制。

    每个数据库至少有两个重做日志文件,采用循环写的方式进行工作。这样就能保证当一个重做日志文件在进行归档时,还有另一个重做日志文件可用。当一个重做日志文件被写满后,后台进行就开始写下一个重做日志文件。当所有的重做日志文件都写满后,LGWR进程再重新开始写入第一个重做日志文件,开始新的循环。

    通常LGWR进程再开始下一个重做日志之前要确定: 该重做日志文件中的所有重做记录所对应的变更操作结果必须全部写入数据文件中。如果数据库处于“归档模式”,要确定对该重做日志文件进行了归档。


    重做日志写进程(LGWR)在任意时刻只能写一组重做日志组,LGWR后台进程正在写的重做日志组叫做当前重做日志组。

    • LGWR将完全相同的信息从重做日志缓冲区复制到改组的每个重做日志文件中。
    • LGWR是以循环的方式写重做日志组的,当写满一个重做日志组时,就会开始写下一组重做日志,这称为日志切换,当写满最后一组时,LGWR又开始写第一组重做日志。
      • 这被称为日志切换
      • 检查点操作也产生
      • 信息被写入控制文件
    • 如果数据库运行在归档模式下(oracle默认为非归档模式),当LGWR的写操作从一个重做日志组切换到下一个重做日志组后,归档写进程(ARCH/ARCH0)就会将原来的重做日志文件中的信息复制到归档日志文件中。
    • oracle服务器保证在归档写进程没有将重做日志文件中的信息复制到归档日志文件中之前,LGWR进程不能再写这组重做日志。

    1. 重做日志文件的写入

    • 为保证数据库是可以恢复的,写入重做日志文件时必须遵守如下两个原则:
    1. 写入的次序要严格按并发事务的执行次序;
    2. 必须先写入重做日志文件再写入数据文件。
    • 循环写入
    • 日志切换或日志序列号
    • 检查点

    2. 强迫日志切换和启动检查点

    1. 日志切换

      可以使用ALTERSYSTEM SWITCH LOGFILE命令来启动

    2. 启动检查点

      • 设置fast_start_mttr_target参数

      • ALTER SYSTEM CHECKPOINT命令

      • ALTER SYSTEM CHECKPOINT

    3. 启动检查点进程的时机

    1. 重做日志切换

      即当一组重做日志写满时切换到下一组重做日志时。

    2. 关闭数据库

      使用NORMAL,TRANSACTIONAL,IMMEDIATTE选项关闭数据库时,启动检查点。

    3. 表空间脱机或被设置成BACKUP模式

    4. 手动检查点

      可以使用ALTER SYSTEM CHRCKPOINT手动设置一个检查点

    5. 时间检查点

      每隔多长时间执行一次检查点。可以通过调整LOG_CHECKPOINT_TOMEOUTLOG_CHECKPOINT_INTERVAL参数来改变检查点执行的间隔。调整时小心,不要让间隔时间太长,也不要添加不必要的检查点。

    6. 初始化参数LOG_CHECKPOINT_TO_ALTER

      如果将设置成TRUE,则关于每个检查点的信息都将被记录到预警日志文件中。该参数默认值是FALSE,表示不记录检查点的信息。如果在预警日志文件中看到关于检查点没有完成的信息,就应该给数据库添加新的重做日志文件,这样会给检查点的完成提供更多的时间,也保证了检查点产生的不是很频繁。

    四、概述重做日志文件的结构

    当写满一个重做日志组时,就会开始写下一组重做日志。当写满最后一组时,LGWR又开始写第一组重做日志。

    重做日志文件的结构

    重做记录

    重做记录

    重做日志文件是由一条一条重做记录组成的,重做记录(REDO RECORD)是有一个个修改向量(CHANGE VECTOR)组成的。每个修改向量记录了对数据库中的某个数据块所作的修改。
    重做记录记录了可以用来对数据可进行恢复的所有修改的数据,包括回退段。因此,重做日志文件同样也会保护回退数据。当使用重做日志文件来进行数据库恢复时,ORACLE将读取其中的重做记录(包括其中的修改向量),并且将这些修改用于相关的块中。
    在ORACLE中,对数据库所作的修改实际上都是先在内存中进行的。当满足一定条件时先将修改操作产生的在SGA区的重做日志高速缓存中的修改结果,以重做记录的形式成批的写入重做日志文件中(此时就认为该事务已成功提交,因为此时可以进行事务的回退了,这种机制被称为“快速提交",然后才将内存中的在SGA区的数据告诉缓存中的修改结构成批的写入数据文件进行永久保存。因此,只要某项修改操作的重做记录没有丢失,就可以通过重做记录来恢复该项的修改操作。
    在相应的数据提交之前,重做记录也可以被写入到重做日志文件中。如当SGA区的重做日志告诉缓存已经填满,或者提交了另一个事务,那么即使某些重做记录还没有提交,LGWR也会将重做日志缓存区中的所有重做记录全部写入到某个重做日志文件中,以便获得更多的空闲空间。这样,如果需要,ORACLE就可以回退这些修改了。

    展开全文
  • 利用栈实现高级表格的的撤消和重做
  • 文章来源: 学习通http://www.bdgxy.com/普学网http://www.boxinghulanban.cn/智学网http://www.jaxp.net/ 目录Undo Log Undo Log产生销毁 Undo Log存储 ...数据库事务开始之前,会将要修改的记录

    文章来源: 学习通http://www.bdgxy.com/

    普学网http://www.boxinghulanban.cn/

    智学网http://www.jaxp.net/


    Undo Log

    数据库事务开始之前,会将要修改的记录存放到 Undo 日志里,当事务回滚时或者数据库崩溃时,可以利用 Undo 日志,撤销未提交事务对数据库产生的影响。

    Undo Log产生和销毁

    Undo Log在事务开始前产生;事务在提交时,并不会立刻删除undo log,innodb会将该事务对应的undo log放入到删除列表中,后面会通过后台线程purge thread进行回收处理。
    Undo Log属于逻辑日志,记录一个变化过程。例如执行一个delete,undolog会记录一个insert;执行一个update,undolog会记录一个相反的update。

    Undo Log存储

    Undo log采用段的方式管理和记录。在innodb数据文件中包含一种rollback segment回滚段,内部包含1024个undo log segment。可以通过下面一组参数来控制Undo log存储。

    show variables like '%innodb_undo%'; 

    Undo Log作用

    实现事务的原子性

    Undo Log 是为了实现事务的原子性而出现的产物。事务处理过程中,如果出现了错误或者用户执行了 ROLLBACK 语句,MySQL 可以利用 Undo Log 中的备份将数据恢复到事务开始之前的状态。

    实现多版本并发控制(MVCC)

    Undo Log 在 MySQL InnoDB 存储引擎中用来实现多版本并发控制。事务未提交之前,Undo Log保存了未提交之前的版本数据,Undo Log 中的数据可作为数据旧版本快照供其他并发事务进行快照读。

    事务A手动开启事务,执行更新操作,首先会把更新命中的数据备份到 Undo Buffer中。
    事务B手动开启事务,执行查询操作,会读取 Undo 日志数据返回,进行快照读

    Redo Log

    指事务中修改的任何数据,将最新的数据备份存储的位置(Redo Log),被称为重做日志。

    Redo Log 的生成和释放

    随着事务操作的执行,就会生成Redo Log,在事务提交时会将产生Redo Log写入Log Buffer,并不是随着事务的提交就立刻写入磁盘文件。
    等事务操作的脏页写入到磁盘之后,Redo Log 的使命也就完成了,Redo Log占用的空间就可以重用(被覆盖写入)。

    Redo Log 工作原理

    Redo Log 是为了实现事务的持久性而出现的产物。防止在发生故障的时间点,尚有脏页未写入表的 ibd 文件中,在重启 MySQL 服务的时候,根据 Redo Log 进行重做,从而达到事务的未入磁盘数据进行持久化这一特性。

    Redo Log 写入机制

    Redo Log 文件内容是以顺序循环的方式写入文件,写满时则回溯到第一个文件,进行覆盖写

    write pos 是当前记录的位置,一边写一边后移,写到最后一个文件末尾后就回到 0 号文件开头;
    checkpoint 是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件;
    write pos 和 checkpoint 之间还空着的部分,可以用来记录新的操作。如果 write pos 追上checkpoint,表示写满,这时候不能再执行新的更新,得停下来先擦掉一些记录,把checkpoint 推进一下。

    Redo Log相关配置参数

    每个InnoDB存储引擎至少有1个重做日志文件组(group),每个文件组至少有2个重做日志文件,默认为ib_logfile0和ib_logfile1。可以通过下面一组参数控制Redo Log存储

    show variables like '%innodb_log%';

    Redo Buffer 持久化到 Redo Log 的策略,可通过 Innodb_flush_log_at_trx_commit 设置

    0:每秒提交 Redo buffer ->OS cache -> flush cache to disk,可能丢失一秒内的事务数据。由后台Master线程每隔 1秒执行一次操作。
    1(默认值):每次事务提交执行 Redo Buffer -> OS cache -> flush cache to disk,最安全,性能最差的方式。
    2:每次事务提交执行 Redo Buffer -> OS cache,然后由后台Master线程再每隔1秒执行OS cache -> flush cache to disk 的操作。

    一般建议选择取值2,因为 MySQL 挂了数据没有损失,整个服务器挂了才会损失1秒的事务提交数据。

    以上就是MySQL 撤销日志与重做日志(Undo Log与Redo Log)相关总结的详细内容,更多关于MySQL 撤销日志与重做日志(Undo Log与Redo Log)的资料请关注菜鸟教程https://www.piaodoo.com/其它相关文章!

    展开全文
  • 撤销和重做(UndoRedo)的C++完美实现(1)(转)经过一年多的时间的摸索,终于找到了一种比较完美的撤销和重做(UndoRedo)的C++实现方案,因为现在很多的应用程序都需要这种功能,所以我将 我的经历写出来让大家分...
  • 123456789101112131415161718192021222324252627282930313233SQL> recover database until cancel;ORA-00279: 更改 984722 (在 09/16/2015 16:04:43 生成) 对于线程 1 是必需的ORA-00289: 建议: /app/archivelog/...
  • 什么是重做日志?

    2018-06-26 16:53:00
    恢复操作的最关键结构是重做日志,它由两个或多个预先分配的文件组成,这些文件存储数据库发生的所有更改。 Oracle数据库的每个实例都有一个关联的重做日志,用于在发生实例故障时保护数据库重做的线程 在多个...
  • 其中数据库是必不可少的一个重要组成部分,每个企业都有大量的数据需要进行统一管理处理,一个好的数据库系统能为企业提供强有力的业务支持。Oracle是一个功能强大、性能稳定,能够满足大多数现代企业对数据存储的...
  • 利用栈实现高级表格的的撤消和重做
  • 备忘录模式实现撤销和重做功能问题结构类图程序代码 问题 某文字编辑软件须提供撤销(Undo)和重做/恢复(Redo)功能,并且该软件可支持文档对象的多步撤销和重做。开发人员决定采用备忘录模式来实现该功能,在实现过程中...
  • 第十章——数据库恢复技术 文章目录第十章——数据库恢复技术一、事务的基本概念(一)基本概念(二)特性二、数据库...事务程序是两个概念: 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序,而
  • 欠着用于对事务的影响进行撤销,后者在错误处理时对已经提交的事务进行重做,它们能保证两点: 发生错误或者需要回滚的事务能够成功回滚(原子性)。 在事务提交后,数据没来得及写入磁盘就宕机时,在下次重新启动后...
  • (1)故障发生时,T1、T3已经提交,T2已经回滚,T4未完成,所以回复时T1、T3要重做,T4撤销,T2因为故障发生前已经回滚(所做所有操作撤销,恢复原值),相当于T2没有发生,所以就不需要处理了。 (2)同理可得:T1...
  • 本文主要向大家介绍了Oracle数据库之Oracle Logminer 分析重做日志RedoLog归档日志ArchiveLog,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。在实际开发过程中,有时我们很有可能需要某个表的...
  • 数据库崩溃后重启时的恢复过程分为三个阶段: 分析阶段:识别页缓存中脏页崩溃时进行的事务。 重做阶段:重放历史记录直到崩溃点。 撤销阶段:回滚所有未完成事务,还原到一致状态。防止再次崩溃,撤销事务操作也...
  • 集群索引,二级索引和撤消页面修改都需要记录重做日志。 重做的整个过程 以更新事务为例,宏观地掌握重做日志流程,如下图所示: 步骤1:首先将原始数据从磁盘读入内存,修改数据的内存副本 步骤2:生成重做日志并将...
  • 数据库恢复技术

    千次阅读 2018-09-20 00:32:29
    什么是事务? 事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可... //表示提交,即提交事务的所有操作,具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,...
  • 文章目录一:数据库恢复的实现技术(1)数据转储(备份)A:转储的分类①:按照系统是否运行事物时分类②:按转储的范围分类(2)登记日志文件A:日志文件的内容B:日志文件的作用C:登记日志文件二:恢复策略(1)...
  • 5 重做日志文件

    2013-07-02 15:46:00
    重做日志文件时为了数据库恢复的物理文件,其中保存了数据库的变更操作信息。 通过重做日志文件通常是...回退(UNDO)如果用户在事务提交之前想回滚事务,那么可以利用重做日志文件撤销事务对数据库所做的变更。 ...
  • 如果创建数据库与创建Hashmap一样便宜怎么办? ClojureClojureScript中的不变内存数据库和Datalog查询... 处于状态状态的客户端变得分离独立:呈现,服务器同步,撤消/重做不会相互干扰。 不变性甚至在单线程浏
  • 事务是数据库管理系统提供的控制数据操作的一种手段,通过这一手段,应用程序员将一系列的数据库操作组合在一起作为一个整体进行操作控制,以便数据库管理系统能够提供一致性状态转换的保证。 事务的ACID特性: ...
  • 原创作者:Mick Xu 甲骨文大学原厂首席讲师 ( 我爱 oracle 技术学习 ) 众所周知,目前最优秀的2款关系型数据库软件分别是甲骨文公司的Ora...
  • 编年史AngularJS 的撤销/重做服务。 支持用户友好的字符串处理、“controller as”语法事件函数调用。 这已针对 Angular 1.2.14+ 进行了测试。 已发现低于 1.2.14 的版本无法与 Chronicle 一起使用,并且不受官方...
  • 数据库的故障恢复

    千次阅读 2021-11-25 17:02:51
    1. 数据库的故障恢复方法 错误的数据输入:应用程序的检测机制进行检测。 系统错误:断电或软件错误。通过数据库的恢复机制进行恢复。 介质故障:磁盘故障,可用数据存储的奇偶校验进行校正,或采用 RAID 技术。 ...
  • 并发 事务程序是两个概念 在关系数据库中,一个事务可以是一条 ...并发事务发生死锁而被选中撤销该事务 违反了某些完整性限制而被终止等 转储操作与用户事务并发进行 为保证数据库是可恢复的,登记日志文件时必须
  • 数据库设计与数据库恢复对应数据库原理内容的第六章和第七章。 ch6.数据库设计 6.1 需求分析 **数据字典**是各类数据描述的集合,是进行详细的数据收集数据分析所获得的主要结果。数据字典在数据库设计中占有很...
  • Oracle数据库的启动关闭要启动关闭数据库,必须要以具有Oracle 管理员权限的用户登陆,通常也就是以具有SYSDBA权限的用户登陆,启动一个数据库需要三个步骤:1、 创建一个Oracle实例(非安装阶段)2、 由实例安装...
  • -利用存储在系统其它地方的冗余数据来修复或重建数据库 中被破坏的或不正确的数据。 恢复的实现技术:复杂 大型数据库产品,恢复子系统的代码要占全部代码的10%以上 恢复机制涉及的关键问题 - (1)如何建立冗余数据...
  • 一直被回退段和重做日志缓冲区所困扰,现在总算有些明白,现在总结一下,其中的错误请大家指正。 从名字上看就可以看出回退段主要用于UNDO的,而重做日志缓冲区主要用于REDO的。 Oracle崩溃恢复步骤如下: 首先...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,441
精华内容 5,376
热门标签
关键字:

数据库撤销和重做