延迟段创建:
create table的时候,并没有真正分配段,而已等真正需要insert的时候才进行分配空间。
Update+ Commit所做的工作:
update:
update:
- 生成undo信息
- 修改数据块
- 给数据块加锁标记,得到锁
- 生成Redo信息
commit:
- 为事务生成SCN,计数
- LGWR把Redo日志写入到磁盘 -- IO最花时间, PLSQL中的Commit不会等LGWR写入磁盘,立刻返回。而其他的调用则需等待
- V$Transaction中删除事务记录
- V$Lock中记录的锁释放
- 清除块上的锁信息
所以commit过程的工作确实不多。
Update + Rollback所做的工作:
update:
- 生成undo信息
- 修改数据块
- 给数据块加锁标记,得到锁
- 生成Redo信息
rollback:
- 从undo读取数据,应用到数据块
- V$Transaction中删除事务记录
- V$Lock中记录的锁释放
- 清除块上的锁信息
- 清除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"根据动态的数据来管理空间分配。
相关推荐
Oracle Redo 和 Undo Mechanism Oracle 中的 redo 和 undo 机制是数据库的核心组件,它们一起协作以确保数据库的事务一致性和可靠性。在本文中,我们将深入探讨 redo 和 undo 机制的工作原理和协作机制。 Undo ...
Oracle redo undo 是 Oracle 数据库中的一种机制,用于确保事务的可恢复性和撤销性。下面是对 redo undo 机制的详细解释。 redo 机制 redo 机制是 Oracle 数据库中的一种机制,用于记录事务的所有操作,以便在...
Oracle中的Undo和Redo是两个非常重要的概念,它们都是Oracle数据库中事务管理和恢复机制的关键组件。Undo和Redo都是为了确保数据库的一致性和可靠性。 什么是REDO? REDO记录transaction logs,分为online和...
在Oracle中,日志文件发挥着关键作用,其中Undo日志和Redo日志是最核心的两种日志类型。 Undo日志,也称为撤销日志,主要用于事务处理中。它的主要作用是记录事务执行之前的数据库状态,即数据块在被修改之前的所有...
在Oracle数据库的Real Application Clusters (RAC)环境中,REDO和UNDO管理扮演着至关重要的角色,确保数据的安全性、事务处理以及数据恢复。在RAC架构中,多个实例共享同一物理数据库,这就需要对REDO和UNDO管理进行...
通过以上介绍可以看出,在Oracle数据库中,正确管理和优化Temp表空间和UNDO表空间是非常重要的,尤其是对于那些执行大量排序、分组操作以及频繁进行事务处理的应用系统来说。合理利用Resize调整大小、替换原有表空间...
"redo与undo_a.pdf"很可能是关于这个主题的一个详细教程或研究报告,可能涵盖了如何配置和管理redo日志文件,如何使用undo来支持事务的ACID属性(原子性、一致性、隔离性和持久性),以及如何在Oracle数据库中实现...
- 自动管理:Oracle 9i引入了自动 Undo 管理(Automatic Undo Management, AUM),默认情况下,数据库会自动管理undo表空间,包括分配和回收空间。 - 手动管理:在AUM之前,管理员需要手动创建和管理undo段,这...
Undo信息与重做日志(Redo Log)有所不同,Redo Log记录了如何重新生成更改,用于数据库的向前滚动恢复,而Undo则记录如何还原更改,用于回退和读取一致性。 管理Undo数据主要包括监控Undo表空间的空闲空间,防止...
在 Oracle 中,Undo 和 Redo 是两个不同的概念。Undo 代表撤销操作,而 Redo 代表重做操作。它们都是 Oracle 数据库中用于维护数据一致性的机制。 1.1. Undo 与 Redo 的区别 Undo 和 Redo 的主要区别在于它们的...
Oracle Undo是Oracle数据库中一个至关重要...综上所述,Oracle Undo是数据库管理的核心组件,它在事务处理、数据恢复和并发控制等方面发挥着关键作用,理解和有效管理Undo对于优化数据库性能和确保数据一致性至关重要。
这种情况可能由突然断电、硬件故障或数据文件损坏导致,影响到Redo日志和Undo记录的同步。 2. 创建新Undo表空间的最佳实践(包含段检查): 在创建新Undo表空间时,确保数据库的健康状态至关重要。首先,从Spfile...
### Oracle Undo 概述 在Oracle数据库中,`Undo`起着至关重要的作用,它...了解`Undo`的工作原理有助于更好地管理和优化Oracle数据库。通过对`Undo`的理解,我们可以更好地评估数据库性能并采取相应的措施来提高效率。
在实际生产环境下,有时需将超大... from tab的Oracle SQL方式直接执行将导致redo、undo日志暴增,使数据库容易假死。针对此问题,采用文中方法可完美解决,且对系统性能几乎无影响(不管是分区表还是普通堆表均可)。
在Oracle 12c版本中引入了一项重要的新特性——Temporary Undo,这项技术旨在优化临时表的操作性能,并减少对Redo日志的空间占用。传统的临时表在进行更新操作时,虽然不会产生Redo条目,但相关的Undo信息仍然会被...
在Oracle数据库系统中,撤销(Undo)和重做(Redo)是两个至关重要的概念,它们主要用于事务管理和数据恢复。撤销操作允许用户撤销对数据库的最近更改,而重做操作则用于在系统崩溃或错误发生时恢复数据。 撤销日志...
LogMiner 可以重构等价的 SQL 语句和 UNDO 语句,记录在 V$LOGMNR_CONTENTS 视图的 SQL_REDO 和 SQL_UNDO 中。LogMiner 还可以将日志中记录的信息转换为原始 SQL 语句,包括数据库的更改历史、更改类型、更改对应的 ...
ORACLE 自动内存管理和存储调整 ORACLE 自动内存管理和存储调整是 ORACLE 数据库中的一种重要配置,它可以根据系统的实际情况自动调整内存和存储的使用,以提高数据库的性能和效率。本文将详细介绍 ORACLE 自动内存...