`

关于redo log 和 undo log 这两个概念 (Oracle)

 
阅读更多

http://blog.163.com/idea_/blog/static/18097026220117268256447/

 

redo log
  重做日志
undo log
  撤消日志
重做日志:每当有操作执行前,将数据真正更改时,先前相关操作写入重做日志。这样当断电,或者一些意外,导致后续任务无法完成时,系统恢复后,可以继续完成这些更改
撤消日志:当一些更改在执行一半时,发生意外,而无法完成,则可以根据撤消日志恢复到更改之前的壮态
网上找到一些解说:以便以后自己参考
有两个概念:前滚与回退
比如某一时刻数据库DOWN机了,有两个事务,一个事务已经提交,另一个事务正在处理
数据库重启的时候就要根据日志进行前滚及回退,把已提交事务的更改写到数据文件,未提交事务的更改恢复到事务开始前的状态。

redo--> undo-->datafile
insert一条记录时, 表跟undo的信息都会放进 redo 中, 在commit 或之前, redo 的信息会放进硬盘上. 故障时, redo 便可恢复那些已经commit 了的数据.

redo->每次操作都先记录到redo日志中,当出现实例故障(像断电),导致数据未能更新到数据文件,则数据库重启时须redo,重新把数据更新到数据文件
undo->记录更改前的一份copy,但你系统rollback时,把这份copy重新覆盖到原来的数据

redo->记录所有操作,用于恢复(redo records all the database transaction used for recovery)
undo->记录所有的前印象,用于回滚(undo is used to store uncommited data infor used for rollback)

redo->已递交的事务,实例恢复时要写到数据文件去的 
undo->未递交的事务.

redo的原因是:每次commit时,将数据的修改立即写到online redo中,但是并不一定同时将该数据的修改写到数据文件中。因为该数据已经提交,但是只存在联机日志文件中,所以在恢复时需要将数据从联机日志文件中找出来,重新应用一下,使已经更改数据在数据文件中也改过来!

undo的原因是:在oracle正常运行时,为了提高效率,加入用户还没有commit,但是空闲内存不多时,会由DBWR进程将脏块写入到数据文件中,以便腾出宝贵的内存供其它进程使用。这就是需要UNDO的原因。因为还没有发出commit语句,但是oracle的dbwr进程已经将没有提交的数据写到数据文件中去了。

undo 也是也是datafile, 可能dirty buffer 没有写回到磁盘里面去。
只有先redo apply 成功了,才能保证undo datafile 里面的东西都是正确的,然后才能rollback

做undo的目的是使系统恢复到系统崩溃前(关机前)的状态,再进行redo是保证系统的一致性. 
不做undo,系统就不会知道之前的状态,redo就无从谈起

所以instance crash recovery 的时候总是先rollforward, 再rollback

undo
回退段中的数据是以“回退条目”方式存储。
回退条目=块信息(在事务中发生改动的块的编号)+在事务提交前存储在块中的数据

在每一个回退段中oracle都为其维护一张“事务表”
在事务表中记录着与该回退段中所有回退条目相关的事务编号(事务SCN&回退条目)

redo
重做记录由一组“变更向量”组成。
每个变更变量中记录了事务对数据库中某个块所做的修改。
当用户提交一条commit语句时,LGWR进程会立刻将一条提交记录写入到重做日志文件中,然后再开始写入与该事务相关的重做信息。

#事务提交成功后,Oracle将为该事备生成一个系统变更码(SCN)。事务的SCN将同时记录在它的提交记录和重做记录中。

commit
提交事务前完成的工作:
·在SGA区的回退缓存中生成该事务的回退条目。在回退条目中保存有该事务所修改的数据的原始版本。
·在SGA区的重做日志缓存中生成该事务的重做记录。重做记录中记载了该事务对数据块所进行的修改,并且还记载了对回退段中的数据块所进行的修改。缓存中的重做记录有可能在事务提交之前就写入硬盘中。
·在SGA区的数据库缓丰中记录了事务对数据库所进行的修改。这些修改也有可能在事务提交之前就写入硬盘中。

提交事务时完成的工作:
·在为该事务指定的回退段中的内部事务表内记录下这个事务已经被提交,并且生成一个惟一的SCN记录在内部事务表中,用于惟一标识这个事务。
·LGWR后进进程将SGA区重做日志缓存中的重做记录写入联机重做日志文件。在写入重做日志的同时还将写入该事务的SCN。
·Oracle服务进程释放事务所使用的所有记录锁与表锁。
·Oracle通知用户事务提交完成。
·Oracle将该事务标记为已完成。

rollback
回退事务完成的工作:
·Oracle通过使用回退段中的回退条目,撤销事务中所有SQL语句对数据库所做的修改。
·Oracle服务进程释放事务所使用的所有锁
·Oracle通知事务回退成功。
·Oracle将该事务标记为已完成

举个例子:
insert into a(id) values(1);(redo)
这条记录是需要回滚的。
回滚的语句是delete from a where id = 1;(undo)

试想想看。如果没有做insert into a(id) values(1);(redo)
那么delete from a where id = 1;(undo)这句话就没有意义了。

现在看下正确的恢复:
先insert into a(id) values(1);(redo)
然后delete from a where id = 1;(undo)
系统就回到了原先的状态,没有这条记录了。

分享到:
评论

相关推荐

    RAC下的REDO和UNDO管理

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

    oracle undo详解

    Undo信息与重做日志(Redo Log)有所不同,Redo Log记录了如何重新生成更改,用于数据库的向前滚动恢复,而Undo则记录如何还原更改,用于回退和读取一致性。 管理Undo数据主要包括监控Undo表空间的空闲空间,防止...

    redo与undo_a.pdf11

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

    undo&redo;.docx

    在Oracle数据库系统中,撤销(Undo)和重做(Redo)是两个至关重要的概念,它们主要用于事务管理和数据恢复。撤销操作允许用户撤销对数据库的最近更改,而重做操作则用于在系统崩溃或错误发生时恢复数据。 撤销日志...

    Oracle中重做undo表空间

    在Oracle数据库系统中,"重做undo表空间"是一个至关重要的概念,它是数据库事务处理的基础。Undo表空间是用来存储事务撤销操作时所需信息的地方,这些信息被称为重做日志(Redo Log)。当一个事务对数据进行修改时,...

    Oracle日志介绍

    Oracle数据库的日志机制是其高可靠性和数据一致性的重要保障,主要包含重做日志(redo log)和归档日志(archived log),以及撤销日志(undo log)。本文将深入探讨Oracle日志的核心知识点,帮助读者理解其工作原理...

    oracle undo

    本文将详细探讨`Undo`的概念、其工作原理以及如何影响Oracle数据库的性能。 ### Undo 的作用 #### 保证事务的回退性 在事务处理过程中,为了确保数据的一致性和事务的原子性,Oracle数据库需要一种机制来记录事务...

    oracle scn概念解析

    **Checkpoint 是 Oracle 数据库的一个关键机制**,用于同步 Data Files、Control File 和 Redo Log Files,确保它们之间的 SCN 保持一致。Checkpoint 过程主要包括以下几个步骤: 1. **Redo Buffer 刷盘**:Redo ...

    oracle概念和术语

    - **系统全局区(SGA)**:包括缓冲区缓存(Buffer Cache)、重做日志缓冲区(Redolog Buffer)、共享池(Shared Pool)等部分,用于存储数据库的数据和控制信息。 - **后台进程**:如数据库写进程(DBWn)、日志写进程(LGWR)...

    Oracle数据库参数设置

    修改 INIT.ORA 文件中的参数 LOG_CHECKPOINT_TIMEOUT 和 LOG_CHECKPOINT_INTERVAL,可以增大这两个参数以减少 I/O 次数,提高系统性能。 LGWR 和 DBWn I/O 也需要调整。LGWR I/O 写的大小依赖于 LOG 缓冲区的大小,...

    oracle_11gR211

    在这个压缩包中,我们有两个文件专注于讲解Oracle数据库中的核心概念——事务(Transaction)及其四大特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和永久性(Durability)。这些特性是...

    Oracle热备的不完全恢复(undo未备份)

    然而,在执行热备时可能会遇到各种情况,比如undo表空间未被备份,这时候就需要采取特殊的恢复方法来恢复数据的一致性和完整性。 #### 热备原理 热备主要依赖于重做日志(Redo Log)记录的事务信息来进行数据恢复...

    《Oracle数据库性能优化实践指南》PDF

    在存储和I/O优化方面,本书会探讨数据块设计、表和索引的分区策略、redo log和undo segment管理,以及如何配置Oracle的缓存机制(如Buffer Cache和Redo Log Buffer)以减少磁盘I/O。此外,还会涉及数据库的内存结构...

    REDO INTERNALS AND TUNING BY REDO

    标题与描述概述的知识点主要集中在Oracle数据库中的重做日志(redolog)的内部机制与调优上。在本文中,我们将深入探讨Oracle重做日志的生成原理、影响其大小的因素以及减少重做日志的方法,同时分析如何检测过量的...

    Oracle知识大全

    - Redo Log与Undo Log:解析日志文件的重要性,包括redo log和undo log在事务处理中的角色。 3. **Oracle性能优化** - SQL优化:使用EXPLAIN PLAN分析SQL执行计划,通过绑定变量和索引优化查询性能。 - 分区技术...

    Oracle Logminer

    这个工具主要由两个包组成:DBMS_LOGMNR 和 DBMS_LOGMNR_D,后者包含数据字典信息。Logminer 的功能在于解析日志文件中的事务信息,以便进行数据库的逻辑恢复、审计追踪以及问题诊断。 在使用 Logminer 进行分析...

    Oracle的概念和术语

    ### Oracle的概念和术语 Oracle数据库系统作为一款复杂且强大的数据库管理系统,在企业和组织中扮演着至关重要的角色。要深入了解并高效地使用Oracle,首先必须掌握其基本概念与术语。本文将根据给定的内容概述...

    oracle 10g-admin1 考试试题

    - **Datafiles and Redolog Files Are Made Available to Users at the OPEN Stage (D)**: After the database reaches the MOUNT state, further steps are taken to make the datafiles and redolog files ...

    深入分析oracle日志文件

    LogMiner 可以重构等价的 SQL 语句和 UNDO 语句,记录在 V$LOGMNR_CONTENTS 视图的 SQL_REDO 和 SQL_UNDO 中。LogMiner 还可以将日志中记录的信息转换为原始 SQL 语句,包括数据库的更改历史、更改类型、更改对应的 ...

    Oracle11g性能优化

    8. **日志与归档**:了解redo log和undo management,以及如何调整归档模式,对保持数据库的事务一致性和故障恢复能力至关重要。 9. **性能监控与诊断**:使用AWR(自动工作区管理)、ASH(活动会话历史)和ADDM...

Global site tag (gtag.js) - Google Analytics