`
wuhuizhong
  • 浏览: 671573 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

关于Oracle的UNDO,REDO和archive log

 
阅读更多

比较INSERT,UPDATE,DELETE产生UNDO和REDO大小,一般情况:

UNDO: INSERT < UPDATE < DELETE

REDO: INSERT < DELETE < UPDATE

DDL既产生UNDO也产生REDO.

SELECT不产生UNDO和REDO.

 

最小化REDO的方法:

1.使用Nologging

2.DIRECT PATH INSERT

3.SQL*Loader

4.使用临时表

5.在DIRECT LOAD时,如果有索引,需要先把索引改成unusable状态,产生数据之后使用Nologging重建。

 

redo logs VS. archive log

归档日志archive log是当数据库运行在归档模式下时,一个redo log file(group)写满后,由ARCn进程将重做日志的内容备份到归档日志文件下,然后这个redo log file(group)才能被下一次使用。

 

-- 测试表
CREATE TABLE TEST(ID NUMBER,NAME VARCHAR2(20)); 
-- 计算 redo 大小
CREATE OR REPLACE FUNCTION GET_STAT_VAL(P_NAME VARCHAR2) RETURN NUMBER IS
  L_VAL NUMBER;
BEGIN
  SELECT B.VALUE
    INTO L_VAL
    FROM V$STATNAME A, V$MYSTAT B
   WHERE A.STATISTIC# = B.STATISTIC#
     AND A.NAME = P_NAME;
  RETURN L_VAL;
END GET_STAT_VAL;

-- INSERT: 在Undo中记录插入行ROWID.
SQL> SET SERVEROUTPUT ON
SQL> variable redo number;
SQL> variable undo number;
SQL> exec :redo := GET_STAT_VAL('redo size');
SQL> exec :undo := GET_STAT_VAL('undo change vector size');
SQL> INSERT INTO TEST VALUES(1,'TEST1');
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('undo change vector size') - :undo)||' byes of undo generated!');
SQL> COMMIT;
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('redo size') - :redo)||' byes of redo generated!');

-- UPDATE: 在Undo中记录被更新列的前镜像和被更新行ROWID.
SQL> SET SERVEROUTPUT ON
SQL> variable redo number;
SQL> variable undo number;
SQL> exec :redo := GET_STAT_VAL('redo size');
SQL> exec :undo := GET_STAT_VAL('undo change vector size');
SQL> UPDATE TEST SET NAME = 'TEST TEST' WHERE ID = 1;
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('undo change vector size') - :undo)||' byes of undo generated!');
SQL> COMMIT;
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('redo size') - :redo)||' byes of redo generated!');

-- DELETE: 在Undo中记录被删除行所有列的前镜像和其ROWID.
SQL> SET SERVEROUTPUT ON
SQL> variable redo number;
SQL> variable undo number;
SQL> exec :redo := GET_STAT_VAL('redo size');
SQL> exec :undo := GET_STAT_VAL('undo change vector size');
SQL> DELETE TEST WHERE ID = 1;
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('undo change vector size') - :undo)||' byes of undo generated!');
SQL> COMMIT;
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('redo size') - :redo)||' byes of redo generated!');

 

分享到:
评论

相关推荐

    oracle的undo与redo

    oracle日志,Undo日志记录某数据被修改前的值,可以用来在事务失败时进行rollback;Redo日志记录某数据块被修改后的值,可以用来恢复未写入data file的已成功事务更新的数据。

    Oracle_Undo与Redo的通俗

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

    seata-oracle版undolog.sql

    oracle版本的undolog建表语句。 2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案。Fescar 的愿景是让分布式事务的使用像本地...

    MySQL数据库之undo log和redo log工作原理.png

    MySQL数据库之undo log和redo log工作原理.png,这是一份图例,画图表示undo log和redo log的工作原理

    MySQL的redo log、undo log、binlog

    文章目录一、MySQL日志文件类型二、几种日志的对比2-1、用途 redo log undo log binlog2-2、存储内容、格式 redo log undo log binlog2-3、日志生成 redo log undo log binlog2-4、删除策略 redo log ...

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

    这个是做实验时,简单基本的Undo、Redo的操作、在一个winForm中实现,并且可以设置Undo的最大次数。包中除了项目外,还附有报告.

    2 万字 + 30 张图 | 细聊 MySQL undo log、redo log、binlog 有什么用?.doc

    2 万字 + 30 张图 | 细聊 MySQL undo log、redo log、binlog 有什么用?.doc

    oracle_redo_undo

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

    NOLOGGING、APPEND、ARCHIVE和PARALLEL下,REDO、UNDO和执行速度的比较

    BLOG_Oracle_lhr_【知识点整理】Oracle中NOLOGGING、APPEND、ARCHIVE和PARALLEL下,REDO、UNDO和执行速度的比较BLOG_Oracle_lhr_【知识点整理】Oracle中NOLOGGING、APPEND、ARCHIVE和PARALLEL下,REDO、UNDO和执行...

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

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

    undo redo 原型设计

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

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

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

    ORACLE redo undo.docx

    Oracle redo undo的说明解释

    今年实习做的MFC画图程序(实现了undo redo功能)

    今年实习刚刚做的MFC画图程序(实现了undo redo功能),发上来互相学习下。

    Arcgis Engine Undo和Redo 功能实现

    Arcgis Engine Undo 和 Redo 功能实现

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

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

    多步Undo_Redo的实现

    实现多步Undo和Redo的方法,对于mfc绘图程序来说,这个很必要,而且很实用!

    Undo_Redo机制在CAD中的应用

    Undo_Redo机制在CAD中的应用, 摘要:为了增强CAD系统的灵活...持无限Undo/Redo和批量化操作的CAD图形绘制系统,文章介绍了各模块的实现原理及核心算法。 关键词:无限撤消/重做设计模式对象持久化批量化操作绘图CAD

    C# undo\redo框架

    Undo/Redo framework for editing controls in a Windows application 在Windows应用程序中编辑控件的撤销/重做框架。

    Simple Undo/redo library for C#/.NET

    Simple Undo/redo library for C#/.NET

Global site tag (gtag.js) - Google Analytics