`
ezerg
  • 浏览: 273522 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

Oracle 10g 读书笔记之 redo 与 undo

阅读更多

redo(重做信息)是 oracle 在在线(或归档)重做日志文件中记录的信息,用于重做事务;undo(撤销)是 oracle 在 undo 段中记录的信息,用于取消或回滚事务。
undo 操作数据库只是逻辑的恢复到原来的样子,但数据结构以及数据块本身在回滚后可以大不相同。这样做的原因是同时可能会有多个并发的事务。
尽管 undo 信息存储在 undo 表空间或 undo 段中,但也会受到 redo 的保护。换句话说,会把 undo 数据当成是表数据或索引数据一样,对 undo 的修改会生成一些 redo 并记入日志。
oracle 的事务提交是一个非常快的操作,不论事务有多大,COMMIT 的响应时间都差不多。因为在提交之前已经完成了99.9%工作,例如已经发生了如下操作:
a、已经在 SGA 中生成了 undo 块
b、已经在 SGA 中生成了已修改的数据块
c、已经在 SGA 中生成了对应前两项的缓存 redo
d、取决于前三项的大小,以及这些工作花费的时间,前面的某些数据可能已经刷新输出到磁盘
e、已经得到了所需的全部锁
执行 COMMIT 时,余下的工作只是
a、为事务生成一个 SCN。它是 oracle 使用的一种简单的计时机制,用于保证事务的顺序,并支持失败恢复。它还用于保证数据库中的读一致性和检查点。
b、LGWR 将所有余下的缓存重做日志条目写至磁盘,并把 SCN 记录到在线重做日志文件中。这一小是真正的 COMMIT。之后事务条目为从 V$TRANSACTION 中“删除”。
c、V$LOCK 中记录着我们的会话持有锁,这些锁都将被释放,而排队等待这些锁的每一个人都会被唤醒,可以继续完成他们的工作。
d、如果事务修改的某些块还在缓冲区中,则会清除存储在数据库块首部与锁相关的信息。

相反 ROLLBACK 时要做以下工作:
a、撤销已做的所有修改。从 undo 段读回数据,然后实际上逆向执行前面所做的操作,并将 undo 条目标记为已用。
b、会话持有的所有锁都将释放,如果有人在排队等待我们持有的锁,就会被唤醒。

减少重做日志的生成:
a、在 SQL 中设置 NOLOGGING。这并不是说这个对象的所有操作在执行时都不生成重做日志,只是说有些特定的操作生成的 redo 会比平常少得多。
b、在索引上设置 NOLOGGING。在段(索引或表)上设置 NOLOGGING 属性,从而隐式的采用 NOLOGGING 模式来执行操作。
c、可以采用 NOLOGGING 模式执行以下操作:
1、索引的创建和 ALTER。例如 create index t_idx on t(name) nologging ,alter index t_idx nologging,alter index t_idx rebuild
2、表的批量 INSERT 。表数据不生成 redo,但是所有的索引修改会生成 redo。
3、LOB 操作(对大对象的更新不必生成日志)。
4、通过 CREATE TABLE AS SELECT 创建表。
5、各种 ALTER TABLE 操作,如 MOVE 和 SPLIT。

块清除:即删除所修改数据库块上与“锁定”有关的信息。后面提到 ORA-01555:snapshot too old 会用到这个概念。
数据锁实际上是数据的属性,存储在块首部。下次访问这个块时,就要将这些事务信息删除,这个动作会生成 redo,并导致块变脏,也就是说 SELECT 可能也会生成 redo 并将块刷新至磁盘。
如果块在还在缓冲区中,那么 COMMIT 时会清除,这样后面的 SELECT 就不必再清理了。只有块的 UPDATE 才会真正清除残余的事务信息,由于 UPDATE 时已经生成 redo,所以注意不到清除工作。

临时表不会为它们的块生成 redo,但会生成 undo,而且这个 undo 为记入日志。
INSERT 会生成很少甚至不生成 undo/redo 活动。因为生成的 undo 很少,oracle 只需要记录要删除的 rowid。
DELETE 在临时表上生成的 redo 与在正常表上生成的 redo 同样多,因它的 undo 很大,需要把整行的前映像记录到 undo 段中。
临时表的 UPDATE 会生成正常表一半的 redo,对于临时表来说不必保存“后映像”(redo)。

SQL> show parameter undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO //自动 undo 管理
undo_retention                       integer     900 // undo 保留的时间
undo_tablespace                      string      UNDOTBS1 // undo 存储表空间

0
5
分享到:
评论

相关推荐

    oracle核心技术读书笔记一附件1

    在系统崩溃或异常情况下,Oracle的重做日志(Redo Log)和undo段保证了事务的持久性。 五、索引 索引是提高查询性能的关键。Oracle支持B树索引、位图索引、函数索引等多种类型的索引。其中,B树索引适用于频繁的...

    Oracle 集群学习笔记.pdf

    RAC支持多种存储机制,如ASM、OCFS2、NFS和Raw Devices,Oracle 10g推荐使用ASM。RAC数据库的主要特点是: - 每个节点都有自己的SGA、后台进程、redo logs和undo表空间。 - 所有节点共享datafiles和controlfiles。...

    Oracle 集群学习笔记.docx

    RAC 数据库与单实例数据库不同的地方是每一个节点的 instance 都有自己的 SGA、background process、redo logs、undo 表空间等。 5. RAC 数据库的特点 RAC 数据库可以实现高可用性和负载均衡,每个实例有自己的...

    Oracle原理学习笔记.docx

    ### Oracle原理学习笔记知识点概述 #### 一、Oracle的工作机制及体系结构 ##### 实例概念 - **定义**: Oracle在运行时会在内存中开辟一个区域,即系统全局区(SGA),用于缓存从磁盘读取的数据。同时,还需要一些...

    Oracle笔记

    Oracle笔记涵盖了数据库管理、SQL查询、表空间管理、性能优化等多个方面的重要知识点,这些内容对于理解和操作Oracle数据库系统至关重要。以下是对这些主题的详细解析: 一、Oracle数据库基础 Oracle数据库是全球...

    ocp11g培训内部教材_052课堂笔记(042)_体系架构

    这门课程的内部教材涵盖了Oracle数据库的体系架构、实例管理、数据库启动关闭、控制文件、redo日志、归档日志、日志挖掘、undo管理、检查点、实例恢复机制、存储架构、数据字典、表空间、表的类型、审计以及数据装载...

    ORACLE调优笔记

    ### ORACLE调优笔记知识点详解 #### 一、Oracle错误代码与解决方法 在Oracle数据库管理及优化过程中,经常会遇到一些常见的错误代码,这些错误往往能够帮助我们快速定位问题所在。 1. **ORA-01652: 无法分配临时...

    2009数据库系统工程师学习笔记

    数据库系统工程师是信息...2009年的笔记可能还会涉及当年流行的数据库技术和最佳实践,比如那时的Oracle 11g、MySQL 5.x等。通过深入学习这些内容,可以全面理解数据库系统的设计和管理,为实际工作提供坚实的基础。

    Oracle性能调优

    8. **读写优化**:理解Oracle的redo log、undo和redo管理,以及事务处理机制,能有效优化读写操作,减少锁定和等待。 9. **数据库连接管理**:优化连接池设置,如使用连接池(如Oracle的DBMSSessionPool),减少...

    OCA-042题库

    - 来自David Dai的Oracle笔记、加加木的个人空间以及Megan2008的博客文章提供了丰富的学习资料,这些在线资源可以帮助考生深入理解和掌握Oracle数据库的基础知识。 6. **考试经验分享** - 分享者提到,OCA认证...

    mysql5.5.25 源码阅读笔记

    5. **日志系统**:InnoDB存储引擎有redo log(重做日志)和undo log(回滚日志),用于事务的持久性和回滚。另外,还有binlog(二进制日志),用于复制和备份。 6. **查询优化**:MySQL的查询优化器(Optimizer)会...

    新052课堂笔记1

    在Oracle数据库系统中,实例(Instance)和数据库(Database)是两个核心概念。实例是由内存结构(System Global Area, SGA)和后台进程组成的,它提供了一种访问数据库的方式。数据库则是物理存储在磁盘上的数据...

    logminer笔记

    Oracle LogMiner作为数据库管理的重要工具,通过深度解析Redo Log,为DBA提供了丰富的数据库操作历史,助力于更高效的问题诊断、性能优化和数据安全性管理。随着版本迭代,LogMiner的功能不断增强,为数据库运维提供...

    系统分析师 复习笔记精华版.pdf

    从提供的文件内容中,可以看出这是一份系统分析师考试复习笔记的精华版。文件内容中包含了大量与数据库、网络协议、多媒体格式、数据备份与恢复、软件工程等相关的知识点。下面将对这些知识点进行详细阐述: 1. ...

Global site tag (gtag.js) - Google Analytics