`
zzhonghe
  • 浏览: 248245 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle的Redo和Undo

    博客分类:
  • DB
 
阅读更多
延迟段创建:  
create table的时候,并没有真正分配段,而已等真正需要insert的时候才进行分配空间。
 
 
Update+ Commit所做的工作:

update:
  1. 生成undo信息
  2. 修改数据块
  3. 给数据块加锁标记,得到锁
  4. 生成Redo信息
commit:
  1. 为事务生成SCN,计数
  2. LGWR把Redo日志写入到磁盘 -- IO最花时间,  PLSQL中的Commit不会等LGWR写入磁盘,立刻返回。而其他的调用则需等待
  3. V$Transaction中删除事务记录
  4. V$Lock中记录的锁释放
  5. 清除块上的锁信息
所以commit过程的工作确实不多。
 
 
Update + Rollback所做的工作:
 
update:
  1. 生成undo信息
  2. 修改数据块
  3. 给数据块加锁标记,得到锁
  4. 生成Redo信息
rollback:
  1. 从undo读取数据,应用到数据块
  2. V$Transaction中删除事务记录
  3. V$Lock中记录的锁释放
  4. 清除块上的锁信息
  5. 清除Redo的缓存
Redo的测量
Redo语句以测量, redo的数量越多,系统就越慢。从DB Trace里面可以跟踪到, Redo是DB中的一个串行点,
 
 
Nologging:
不使用日志的情况,也就是不需要恢复数据。 比如索引的创建,即使介质出问题,索引还是可以重建。
 
 
临时表:
oracle的临时表,不会生成redo, 但是会生成undo.  所以他是不能恢复的。
临时表有支持多版本控制和并发,能够回滚,所以undo是必须的。
 
 
Truncate table和Delete Table:
我们都知道truncate table是很快,而delete table很慢。 一个主要原因是truncate是DDL,没有undo信息生成
 
 
 
Undo信息生成的DML排名
Insert语句生成很少的Undo,因为只为rowid生成Undo
update语句的Undo集中在被修改的字段上面, 而如果是带索引的字段修改,那么Undo是2.5倍
delete生成的Undo最多,整行的生成,所以开销是最大。  
 
所以避免在同步过程中执行delete的操作是一个好的编程习惯。
 
 
ORA-1555 Snapshot Too Old
这是一个经常见到的问题, 影响到查询语句,使收到这个错误的查询语句不能继续,它和数据破坏或者数据丢失完全没有关系,根本原因是提交得太过频繁。
由于读一致的存在,一个较长时间的查询访问到了一个undo块,但是由于undo的空间太少,这个undo块在后来的查询等待中,被其他的session所修改,那么这个查询就会返回这个错误。
 
为了避免这个问题,可以设置自动管理Undo  UNDO_RETENTION,让DB内置的"DBA"根据动态的数据来管理空间分配。
 
0
0
分享到:
评论

相关推荐

    oracle_redo_undo

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

    ORACLE redo undo.docx

    Oracle redo undo 是 Oracle 数据库中的一种机制,用于确保事务的可恢复性和撤销性。下面是对 redo undo 机制的详细解释。 redo 机制 redo 机制是 Oracle 数据库中的一种机制,用于记录事务的所有操作,以便在...

    Oracle_Undo与Redo的通俗

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

    oracle的undo与redo

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

    RAC下的REDO和UNDO管理

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

    Oracle的Temp表空间和UNDO表空间的处理

    通过以上介绍可以看出,在Oracle数据库中,正确管理和优化Temp表空间和UNDO表空间是非常重要的,尤其是对于那些执行大量排序、分组操作以及频繁进行事务处理的应用系统来说。合理利用Resize调整大小、替换原有表空间...

    redo与undo_a.pdf11

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

    Oracle中重做undo表空间

    - 自动管理:Oracle 9i引入了自动 Undo 管理(Automatic Undo Management, AUM),默认情况下,数据库会自动管理undo表空间,包括分配和回收空间。 - 手动管理:在AUM之前,管理员需要手动创建和管理undo段,这...

    oracle undo详解

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

    ORACLE的UNDO表空间

    在 Oracle 中,Undo 和 Redo 是两个不同的概念。Undo 代表撤销操作,而 Redo 代表重做操作。它们都是 Oracle 数据库中用于维护数据一致性的机制。 1.1. Undo 与 Redo 的区别 Undo 和 Redo 的主要区别在于它们的...

    Oracle 面试宝典-undo.docx

    Oracle Undo是Oracle数据库中一个至关重要...综上所述,Oracle Undo是数据库管理的核心组件,它在事务处理、数据恢复和并发控制等方面发挥着关键作用,理解和有效管理Undo对于优化数据库性能和确保数据一致性至关重要。

    Oracle创建新undo表空间最佳实践(包含段检查)

    这种情况可能由突然断电、硬件故障或数据文件损坏导致,影响到Redo日志和Undo记录的同步。 2. 创建新Undo表空间的最佳实践(包含段检查): 在创建新Undo表空间时,确保数据库的健康状态至关重要。首先,从Spfile...

    oracle undo

    ### Oracle Undo 概述 在Oracle数据库中,`Undo`起着至关重要的作用,它...了解`Undo`的工作原理有助于更好地管理和优化Oracle数据库。通过对`Undo`的理解,我们可以更好地评估数据库性能并采取相应的措施来提高效率。

    Oracle中如何对超大规模数据(如超过2亿条)直接用SQL语句入库?

    在实际生产环境下,有时需将超大... from tab的Oracle SQL方式直接执行将导致redo、undo日志暴增,使数据库容易假死。针对此问题,采用文中方法可完美解决,且对系统性能几乎无影响(不管是分区表还是普通堆表均可)。

    12c 新特性-Temporary Undo

    在Oracle 12c版本中引入了一项重要的新特性——Temporary Undo,这项技术旨在优化临时表的操作性能,并减少对Redo日志的空间占用。传统的临时表在进行更新操作时,虽然不会产生Redo条目,但相关的Undo信息仍然会被...

    undo&redo;.docx

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

    深入分析oracle日志文件

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

    ORACLE自动内存管理和存储调整

    ORACLE 自动内存管理和存储调整 ORACLE 自动内存管理和存储调整是 ORACLE 数据库中的一种重要配置,它可以根据系统的实际情况自动调整内存和存储的使用,以提高数据库的性能和效率。本文将详细介绍 ORACLE 自动内存...

Global site tag (gtag.js) - Google Analytics