精华内容
下载资源
问答
  • 利用栈实现高级表格的的撤消和重做
  • 撤销和重做(UndoRedo)的C++完美实现(1)(转)经过一年多的时间的摸索,终于找到了一种比较完美的撤销和重做(UndoRedo)的C++实现方案,因为现在很多的应用程序都需要这种功能,所以我将 我的经历写出来让大家分...
    撤销和重做(Undo和Redo)的C++完美实现(1)(转)
    经过一年多的时间的摸索,终于找到了一种比较完美的撤销和重做(Undo和Redo)的C++实现方案,因为现在很多的应用程序都需要这种功能,所以我将 我的经历写出来让大家分享,同时也能够让更多的人帮助我来更加完善这种架构,同时也能够让更多的人能够利用这种架构更好的完成它的程序。这种架构充分利用 了STL的容器和算法来简化代码,因此有着比较高的正确性和可读性。
    在解析我的架构之前先分析一下(我所知道的)目前存在的一些实现撤销和重做的方案的优缺点。当前存在的撤销和重做的方案主要是:
    撤销和重做方案

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10797429/viewspace-101654/,如需转载,请注明出处,否则将追究法律责任。

    user_pic_default.png
    请登录后发表评论 登录
    全部评论
    <%=items[i].createtime%>

    <%=items[i].content%>

    <%if(items[i].items.items.length) { %>
    <%for(var j=0;j
    <%=items[i].items.items[j].createtime%> 回复

    <%=items[i].items.items[j].username%>   回复   <%=items[i].items.items[j].tousername%><%=items[i].items.items[j].content%>

    <%}%> <%if(items[i].items.total > 5) { %>
    还有<%=items[i].items.total-5%>条评论 ) data-count=1 data-flag=true>点击查看
    <%}%>
    <%}%> <%}%>

    转载于:http://blog.itpub.net/10797429/viewspace-101654/

    展开全文
  • 数据库 重做undo回滚rollback

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

    概念:

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

    经典习题

    在这里插入图片描述

    答案

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

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

    展开全文
  • 利用栈实现高级表格的的撤消和重做
  • 其中数据库是必不可少的一个重要组成部分,每个企业都有大量的数据需要进行统一管理处理,一个好的数据库系统能为企业提供强有力的业务支持。Oracle是一个功能强大、性能稳定,能够满足大多数现代企业对数据存储的...

    0引言随着社会的发展和科技的进步,一个企业要在竞争激烈的环境中生存发展,就必须采用高效、便捷、功能强大的计算机技术来处理日常业务。其中数据库是必不可少的一个重要组成部分,每个企业都有大量的数据需要进行统一管理和处理,一个好的数据库系统能为企业提供强有力的业务支持。Oracle是一个功能强大、性能稳定,能够满足大多数现代企业对数据存储的要求的数据库系统。作为一个面向企业应用的数据库系统,它提供了完善的数据恢复功能,采取了一系列措施,确保数据库在发生故障后,能保持事务的原子性和持久性,确保数据不丢失、不破坏。而保障数据完整性的核心技术就是日志。1Oracle的日志1.1日志日志(Log)是记载数据库修改信息的数据结构,日志文件是日志记录的汇集。日志完整记录了数据库所有活动,其中不仅包含有数据的历史记录:新建(Insert)、更新(Update)和删除(Delete),也包含有事务的历史记录:开始(Begin)、提交(Commit)和回滚(Rollback)。日志有两种类型,重做(Redo)和撤销(Undo)。撤销日志对应于即时的数据库修改。所有的数据修改操作直接作用在原表上,日志则记录了修改的过程,当要撤销某个操作时,通过把日志中的历史记录写回到原表,就可以撤销该操作,把数据库回退之前的状态。重做日志则通过推迟数据库的修改,来实现相同的功能。通过把事务的所有实际操作推迟到事务提交后才进行,在事务提交后根据日志记录中对数据库数据的修改信息对数据文件进行写入,从而实现事务的原子性。如果事务在未提交之前发生了故障,则当前事务所做的修改只写到了日志文件中而没有被写到数据文件中,这时数据库恢复子系统会直接忽略日志中的信息,不去修改数据文件。12另一方面,如果在事务提交后发生了故障,可能事务已经执行完成,但是只写了日志文件而没有写数据文件,这时恢复子系统从日志中可以判断那些动作需要重做,然后利用日志中记录的对应信息进行数据文件的重写。1.2Oracle日志文件组成Oracle的日志系统是基于重做日志的,分为两类:联机日志(OnlineRedoLog)和归档日志(ArchivedRedoLog)。联机日志是每个Oracle数据库必须有的日志,它支持着数据库的正常运作。一旦相关联的数据库发生了变更,那些记录就会被写入联机日志。其中既有变更前的旧数据又有变更后的新数据。联机日志由两个以上的文件组成,它们循环地记录着数据库当前的变更,当一个日志文件写满后,日志管理进程会使用另一个日志文件,直到所有的日志文件都写了一遍后,再重新写第一个文件,开始新的一轮循环。通过配置Oracle数据库,可以使联机日志文件在写满后以归档的形式保存起来,这就是归档日志。在归档日志中通过日志序列号LSN(LogSequenceNumber)来唯一确定每一个联机日志。归档日志记录的是变更记录的历史,联机日志记录的是当前最近的变更记录。通过合理使用这两类的日志文件,可以把Oracle数据库恢复到任何一个历史状态。1.3Oracle日志系统运行机制Oracle在运行时会把数据文件以块(Block)为单位加载到缓存,所有的操作都发生在缓存中,当操作完毕后再以块的形式写到文件中。Oracle重做日志记录了所有的发生在缓存中的变化,其中包括有数据、索引和回滚段的变更。而且不论这个变更提交与否,都会写重做日志。一个日志实体包含一组变更向量,它们记录了对数据库的原子操作。Oracle的后台进程LGWR(LogWriterProcess)管理着日志的保存。它每隔三秒或是在遇到事务递交的时候,把在缓存中生成的日志

    展开全文
  • SQLite中如何用触发器执行取消和重做逻辑... 我的想法是创建一个特殊的表格(例如名为撤销记录),表格保存数据库撤销和重做变化所需的信息。因为数据库中的每个表格都需要参与撤销和重做,每个DELETE,INSERT,UPDAT

    SQLite中如何用触发器执行取消和重做逻辑(1)
     
    作者:tamsyn  来源:
    www.sqlite.com.cn 
     
    这页主要描述一个使用SQLite作为主要数据结构的应用程序如何使用触发器去执行取消和重做逻辑。

    我的想法是创建一个特殊的表格(例如名为撤销记录),表格保存数据库撤销和重做变化所需的信息。因为数据库中的每个表格都需要参与撤销和重做,每个DELETE,INSERT,和UPDATE都生成了触发器,DELETE,INSERT,和UPDATE可以在撤销日志表格中生成登记项,这个登记项将撤销操作。撤销表格中的登记项由一般的SQL语句组成,为了完成撤销,SQL语句可以被重新运行。

    例如,如果你想在类似下面表格中执行撤销或重:


      CREATE TABLE ex1(a,b,c);

    Then triggers would be created as follows:


      CREATE TEMP TRIGGER _ex1_it AFTER INSERT ON ex1 BEGIN
        INSERT INTO undolog VALUES(NULL,'DELETE FROM ex1 WHERE rowid='||new.rowid);
      END;
      CREATE TEMP TRIGGER _ex1_ut AFTER UPDATE ON ex1 BEGIN
        INSERT INTO undolog VALUES(NULL,'UPDATE ex1
           SET a='||quote(old.a)||',b='||quote(old.b)||',c='||quote(old.c)||'
         WHERE rowid='||old.rowid);
      END;
      CREATE TEMP TRIGGER _ex1_dt BEFORE DELETE ON ex1 BEGIN
        INSERT INTO undolog VALUES(NULL,'INSERT INTO ex1(rowid,a,b,c)
          VALUES('||old.rowid||','||quote(old.a)||','||quote(old.b)||
                 ','||quote(old.c)||')');
      END;

    在ex1表格中执行每个INSERT后, the _ex1_it 触发器生成DELETE语句的文本,它将撤销INSERT操作。 The _ex1_ut触发器生成UPDATE语句,这语句将取消一个UPDATE所产生的作用。_ex1_dt触发器生成一个语句,这语句将取消一个DELETE所具有的作用。

    要注意quote()函数在这些触发器中的使用。quote()函数在SQLite中是标准的。它把它的参数转换成一种适合被包含在SQL语句中的形式。数字值不改变。单个的quotes被加在字符串之前或之后,任何内在的单个quotes都被逃逸。quote()函数被加入SQLite是为了执行撤销和重做操作。

    当然,你也可以像上面一样用手生成触发器。但这个技术最突出的特点就是这些触发器可以自动生成。

    例子中编码的语言是TCL。使用其它语言也是可以的,但是有可能要做更多工作。记住,这里的编码是demonstration技术,不是一个方便的模式,不能自动的为你做每件事。 下面所示的demonstration编码是源于程序执行过程中所使用的真实的代码。但你在使用它的时候,为了满足你的需要,你需要做些改变。

    为了激活撤销和重做的逻辑,激活要参加撤销和重做的所有种类的(表格)undo::activate指令作为参数。用undo::deactivate, undo::freeze, and undo::unfreeze来控制undo/redo机制的状态。

    The undo::activate指令在数据库中生成临时的触发器,它记录表格中所有被命名为参数的变化。

    在一系列的改变定义了一个单独的undo/redo步骤后,激活undo::barrier指令来定义那步的局限性。在一个交互式的程序中,在做任何改动后,你可以调用undo::event,undo::barrier将被自动调用作为一个等待的回调。

    当使用者按下Undo按钮,激活undo::undo。当使用者按下Redo按钮,激活undo::redo。

    在调用undo::undo or undo::redo,undo/redo模块将自动在所有顶级有名字的空间激活程序status_refresh和reload_all。 这些程序应该被定义用来重建画面,或者更新基于undone/redon在数据库中变化的程序的状态。 
     

    展开全文
  • 备忘录模式实现撤销和重做功能问题结构类图程序代码 问题 某文字编辑软件须提供撤销(Undo)和重做/恢复(Redo)功能,并且该软件可支持文档对象的多步撤销和重做。开发人员决定采用备忘录模式来实现该功能,在实现过程中...
  • 重做和撤销

    2019-06-28 18:19:39
    参考,大神https://www.cnblogs.com/wanghui9072229/archive/2011/08/29/2158960.html 采用Qt4.7编写的一个源码例子,可以参考学习下 代码链接如下:... ...
  • 本文主要向大家介绍了Oracle数据库之Oracle Logminer 分析重做日志RedoLog归档日志ArchiveLog,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。在实际开发过程中,有时我们很有可能需要某个表的...
  • 撤销重做(Undo/Redo)

    千次阅读 2014-05-16 11:17:36
    撤销和重做的实现过程中,总会出现各种各样的特殊情况特殊技巧来实现撤销和重做 功能,由于本系列文档实现的是采用了一般化的方法实现了撤销和重做框架!所以就要思 考这样的问题:采用取巧的方法是否一定比这里...
  • Oracle数据库中的三大核心文件分别是数据文件(data file)、重做日志(redo log)控制文件(control file)。数据文件保证了数据库的持久性,是保存修改结果的地方;重做日志保证了数据库的可恢复性,是保存修改...
  • SQLite中如何用触发器执行取消和重做逻辑(2)    作者:tamsyn 来源:www.sqlite.com.cn    下面的demonstration代码包含一个status_refresh程序,它激活Undo and Redo按钮, 根据没做的重做的事来选
  • 一直被回退段和重做日志缓冲区所困扰,现在总算有些明白,现在总结一下,其中的错误请大家指正。 从名字上看就可以看出回退段主要用于UNDO的,而重做日志缓冲区主要用于REDO的。 Oracle崩溃恢复步骤如下: 首先...
  • 重做和回滚

    2013-04-12 15:56:57
    oracel有两种重做日志文件,联机重做日志文件归档重做日志文件。联机重做日志文件最少有2个,当事务commit或者 进程CKPT的触发,都会把缓存中的重做条目写入到联机重做日志中;当第1个联机重做日志写满后,会转向...
  • Shuttle:平台即服务 (PaaS) 云计算中的入侵恢复 硕士学位论文 INESC-ID研究 Shuttle 是一个入侵恢复系统,它记录用户的 HTTP 请求,创建 NoSQL 数据库的请求一致快照。 当入侵发生时,Shuttle 加载入侵瞬间之前的...
  • SQLite中如何用触发器执行取消和重做逻辑 转载 ...这页主要描述一个使用SQLite作为主要数据结构的应用程序如何使用触发器去执行取消...我的想法是创建一个特殊的表格(例如名为撤销记录),表格保存数据库撤销...
  • 什么是重做日志?

    2019-09-30 12:15:32
    恢复操作的最关键结构是重做日志,它由两个或多个预先分配的文件组成,这些文件存储数据库发生的所有更改。 Oracle数据库的每个实例都有一个关联的重做日志,用于在发生实例故障时保护数据库重做的线程 在多个...
  • 回滚段的作用:事务隔离并保证读一致性、事务rollback时恢复数据 事务隔离:事务AB同时运行,A修改了一行数据但未提交,此时Oracle有可能已经将该数据更新到数据... 重做日志的作用:数据库崩溃时恢
  • 您可以使用操作系统命令重定位重做日志,然后使用ALTER DATABASE语句使数据库知道其新名称(位置)。此过程是必要的,例如,如果要删除当前用于某些重做日志文件的磁盘,或者数据文件多个重做日志文件存储在同一...
  • SQLite中如何用触发器执行取消和重做逻辑(2) 作者:tamsyn 来源:www.sqlite.com.cn  下面的demonstration代码包含一个status_refresh程序,它激活Undo and Redo按钮, 根据没做的重做的事来选菜单。...
  • 数据库还原恢复浅析: 在数据库中,有些文件是关键的,关键文件受损意味着数据库实例将终止(如果处于打开状态),且在损坏或被修复之前不能重新打开它。而其他文件时非关键的;如果这些文件受损,数据库保持保持...
  • ORACLE 重做日志

    千次阅读 2016-01-01 01:29:47
    重做日志(Redo Log)用于记录所有对数据库的改变,也被成为事物日志文件(TRANSACTION LOGFILE)。...一、重做日志文件概述重做日志分为在线重做日志归档重做日志。 online Redo log files–在
  • SQLite中如何用触发器执行取消和重做逻辑(3)    作者:tamsyn 来源:www.sqlite.com.cn    ######################################################################
  • Oracle重做日志

    千次阅读 2014-09-17 17:02:44
    Oracle Redo Log重做日志会记录所有的数据库变化,当执行DML或DDL操作时,oracle会将数据库变化信息记载到重做日志中。Redo Log的主要目的是,万一实例或介质失败,可以使用重做日志来恢复。(官方文档说明:Redo log,...
  • 集群索引,二级索引和撤消页面修改都需要记录重做日志。 重做的整个过程 以更新事务为例,宏观地掌握重做日志流程,如下图所示: 步骤1:首先将原始数据从磁盘读入内存,修改数据的内存副本 步骤2:生成重做日志并将...
  • 重做记录

    2013-07-22 09:31:15
    数据库的任何变更都会产生一条重做记录,是定义哪些操作必须在一起,并且按顺序执行。包含了一系列操作。   一个变更对应一条重做记录,一个重做记录包含一个或多个CHANGE VECTOR ,change vector记录了对一个数据...
  • 1)数据安全性控制:防止未经授权的用户存取数据库中的数据,避免数据的泄露,更改或破坏; 2)数据完整性控制:保证数据库中数据及语义的正确性有效性,防止任何对数据库造成错误的操作; 3)数据库的并发控制...
  • 对delete来说,虽然变更后行不存在,但是因为重做记录也要负责产生撤销数据块的变更,所以行被删除之前的各字段的值也记载在撤销数据块的变更矢量中。简单地说,在insertdelete命令的重做记录中,能找到整行的所有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,725
精华内容 4,690
关键字:

数据库撤销和重做