`
javasalatu
  • 浏览: 756819 次
  • 性别: Icon_minigender_2
  • 来自: 北京
博客专栏
96df99eb-e89d-3228-9c8e-967fc745ec52
程序员的自我经营之道
浏览量:7821
文章分类
社区版块
存档分类
最新评论

Redo 和Undo的区别和联系 详细解释

 
阅读更多
Redo和Undo
  • Redo及其作用
  • Undo及其作用
  • Redo与Undo的关系
  • 提交和回滚处理
  • 基于LogMiner的日志分析

1

1.1 Redo及其作用

1.1.1Redo的作用是恢复已提交的事务,从而保证无论在介质失败还是实例失败时,都可以恢复用户已提交的事务,使数据库达到一致状态。

1.1.2Redo功能的实现依赖于以下三个组件:

    • Log Buffer
    • LGWR
    • 联机重做日志文件和归档日志文件

    1.2 Redo数据量的测量

    1.2.1用SQL*Plus内置的AUTORACE功能统计(只能针对简单的DML操作,无法统计存储过程调用等复杂操作的日志信息):


    1.2.2.通过动态性能视图v$mystat检索。例如:


    2 Undo及其作用

    2.2.1Undo的作用是:
    回滚操作;
    支持读一致性;
    恢复失败的事务。
    2.2.2Undo的实现是通过Undo表空间内的undo段来实现的。每个事务只被分配一个undo段,undo段可以服务于多个事务。
    2.2.3Undo机制只是逻辑地把数据恢复到修改前的状态,而不是物理地恢复。

    语句中使用以下动态性能视图查询当前事务使用的undo块数:
    V$MYSTAT:取得会话ID;
    V$SESSION:获取事务地址;
    V$TRANSACTION:找出事务使用的undo块数。
    事务提交或回滚时会释放undo块占用的空间。
    9.3 Redo与Undo的比较

    Undo
    Redo
    记录
    怎样还原修改
    怎样创建修改
    用于
    回滚、读一致性
    前滚、数据库修改
    存储于
    Undo段
    Redo日志文件
    保护
    多用户系统中的读一致性
    损失的数据

    3.4 undo管理
    管理目标是避免出现两种错误:
    vORA-01650: unable to extend rollback segment
    vORA-01555: snapshot too old
    管理方式落实为正确配置三个参数和一个还原表空间属性:
    UNDO_MANAGEMENT
    UNDO_TABLESPACE
    UNDO_RETENTION
    RETENTION GUARANTEE
    9.5 提交和回滚处理
    commit操作需要的时间很“平”,与事务的大小没有直接关系。
    rollback操作所需的时间与事务所修改的数据量直接相关。
    因此在设计事务时,不要考虑事务的大小和多少,而应以所执行的操作是否构成一个逻辑工作单元作依据。
    提交前后完成的操作
    提交前可能完成的操作
    在SGA中生成UNDO块
    在SGA中生成已修改的数据块
    在SGA中生成前两项对应的redo日志
    如果需要,前面的某些数据可能已经刷新输出到磁盘
    得到所需的所有锁
    提交时要完成的操作
    为事务生成SCN
    LGWR把剩余所有缓存重做日志和SCN写入日志文件
    释放锁
    对缓冲区中的数据块进行块清理
    回滚前后完成的操作
    v回滚前可能完成的操作
    在SGA中生成UNDO块
    在SGA中生成已修改的数据块
    在SGA中生成前两项对应的redo日志
    如果需要,前面的某些数据可能已经刷新输出到磁盘
    得到所需的所有锁
    v回滚时要完成的操作
    撤销已做的所有修改
    释放锁

    分享到:
    评论

    相关推荐

      oracle_redo_undo

      Oracle Redo 和 Undo Mechanism Oracle 中的 redo 和 undo 机制是数据库的核心组件,它们一起协作以确保数据库的事务一致性和可靠性。在本文中,我们将深入探讨 redo 和 undo 机制的工作原理和协作机制。 Undo ...

      RAC下的REDO和UNDO管理

      在Oracle数据库的Real Application Clusters (RAC)环境中,REDO和UNDO管理扮演着至关重要的角色,确保数据的安全性、事务处理以及数据恢复。在RAC架构中,多个实例共享同一物理数据库,这就需要对REDO和UNDO管理进行...

      C# undo\redo框架

      - 应用程序接口:提供公共的AddCommand、Undo和Redo方法供其他部分调用。 6. **扩展性和性能考虑**: 框架应支持多种类型的命令,比如文本编辑、列表选择、绘图等。同时,为了防止内存消耗过大,可以设定撤销/...

      C#做的简单的Undo、Redo功能的实现

      在编程领域,撤销(Undo)和重做(Redo)功能是用户界面中常见的操作,它们允许用户取消或恢复最近的更改。在C#中,我们可以利用.NET框架提供的事件驱动和面向对象特性来实现这样的功能。这篇实验主要探讨了如何在...

      3000帧动画图解MySQL为什么需要binlog、redo log和undo log.doc

      MySQL为什么需要binlog、redo log和undo log的知识点总结 MySQL数据库管理系统需要binlog、redo log和undo log三个重要的日志系统,以确保数据的一致性和持久性。下面是对这些日志系统的详细解释: 为什么需要分层...

      redo与undo_a.pdf11

      "redo与undo_a.pdf"很可能是关于这个主题的一个详细教程或研究报告,可能涵盖了如何配置和管理redo日志文件,如何使用undo来支持事务的ACID属性(原子性、一致性、隔离性和持久性),以及如何在Oracle数据库中实现...

      ORACLE redo undo.docx

      下面是对 redo undo 机制的详细解释。 redo 机制 redo 机制是 Oracle 数据库中的一种机制,用于记录事务的所有操作,以便在故障时恢复事务。redo 机制可以保证事务的可恢复性。 redo 机制的工作流程如下: 1. 当...

      mfc support redo/undo

      本文将深入探讨如何在MFC应用中实现撤销(Undo)和重做(Redo)功能,这对于任何具有用户交互性的软件都是至关重要的特性。 撤销/重做功能是许多应用程序的标准组成部分,允许用户取消他们的最近操作,并在需要时...

      Oracle_Undo与Redo的通俗

      Oracle中的Undo和Redo是两个非常重要的概念,它们都是Oracle数据库中事务管理和恢复机制的关键组件。Undo和Redo都是为了确保数据库的一致性和可靠性。 什么是REDO? REDO记录transaction logs,分为online和...

      QT撤消操作(undo/redo)例子

      本工程用vs2008打开,但需要qt库的支持,需要先安装qt-in-vs2008,才可通过编译。或者直接将里面的代码拷贝出来,然后在自己的环境中编译也行。代码中应用了QUndoCommand来实现撤销与反撤销操作。

      实现Redo Undo的一个简单实例,包含源码

      在IT行业中,"Redo"和"Undo"功能是用户界面设计中的重要组成部分,尤其是在文本编辑器、图形编辑软件或任何允许用户进行可逆操作的应用程序中。它们为用户提供了一种方便的方式来撤销或恢复之前的改动,增加了用户...

      多步Undo_Redo的实现

      接下来,我们将详细介绍实现多步Undo/Redo功能的具体步骤和技术细节。 ##### 1. 建立基础类`CEditRecord` ```cpp class CEditRecord : public CObject { public: CEditRecord(); public: virtual BOOL Undo() =...

      C#实现的undo/redo的window窗体

      针对一个window窗体实现了undo/redo功能,包括textBox,checkBox, listBox, comboBox, radioButton以及按钮焦点变化的实现。可能有些小bug思路仅供参考。完整的工程文件,VS打开即可运行,欢迎评论~ 详细说明参见...

      undo redo 原型设计

      cpp文件 undo redo 原型设计 部分代码 class Command { public: virtual BOOL UnDo() = 0; virtual BOOL ReDo() = 0; };

      redo undo framework source code

      在IT行业中,"redo undo"框架是用于实现撤销/重做功能的核心技术,常见于各种软件和应用程序中,如文本编辑器、图像处理软件、数据库系统等。它允许用户取消最近的操作并恢复先前的状态,提供了对用户交互的强大支持...

      GIS软件中undo与redo的设计与实现

      GIS软件中的Undo与Redo功能是编辑操作的重要组成部分,它们允许用户撤销和恢复之前的编辑行为。本文深入分析了GIS软件中Undo与Redo操作的设计与实现,其主要内容包括Undo与Redo操作的原理、机制、流程以及实现方法。...

      oracle的undo与redo

      在Oracle中,日志文件发挥着关键作用,其中Undo日志和Redo日志是最核心的两种日志类型。 Undo日志,也称为撤销日志,主要用于事务处理中。它的主要作用是记录事务执行之前的数据库状态,即数据块在被修改之前的所有...

      Multiple Level Undo/Redo多级Undo/Redo功能的实现(7KB)

      在软件开发中,多级撤销/重做(Multiple Level Undo/Redo)是用户体验中的一个关键特性,尤其在文本编辑器、图像处理软件或者任何允许用户进行一系列可逆操作的应用中。这一功能允许用户在执行一系列操作后,通过...

      MySQL的redo log、undo log、binlog

      MySQL数据库中有多种日志文件,其中最重要的三种是重做日志(redo log)、回滚日志(undo log)和二进制日志(binlog)。重做日志确保事务的持久性,回滚日志用于事务回滚,而二进制日志则用于数据复制和恢复。 1. ...

    Global site tag (gtag.js) - Google Analytics