当前位置:  数据库>oracle

Oracle 10g 读书笔记之 redo 与 undo

    来源: 互联网  发布时间:2017-04-12

    本文导语: redo(重做信息)是 Oracle 在在线(或归档)重做日志文件中记录的信息,用于重做事务;undo(撤销)是 oracle 在 undo 段中记录的信息,用于取消或回滚事务。 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 存储表空间





    
 
 

您可能感兴趣的文章:

  • Oracle 免费送出硬纸板的笔记本电脑?!
  • Linux+Oracle学习笔记
  • Oracle 10G进程体系学习笔记
  • Linux 下 Oracle 命令学习笔记
  • Linux下安装oracle问题笔记
  • oracle 技巧学习笔记
  • Oracle数据库基本知识学习笔记
  • 如何在linux + text下安装oracle8/9,我的笔记本是dell latitude d600,我找不到显卡驱动
  • Oracle 下 spfile和pfile使用笔记
  • Linux Oracle 10g 新手笔记
  • Oracle学习笔记(六)
  • oracle9204升级到9206笔记
  • Linux下安装Oracle数据库完整笔记
  • ORACLE学习笔记-添加更新数据函数篇
  • Solaris 10 U3安装Oracle 10g R2实例笔记
  • Linux系统下安装Oracle数据库笔记
  • oracle学习笔记(二)
  • ORACLE学习笔记-新建用户及建表篇
  • ORACLE学习笔记-查询篇
  • Oracle笔记之简单查询、限定查询和排序
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于Oracle数据库日志redo log
  • 增大Oracle REDO LOG的SIZE
  • [Oracle] Data Guard 之 Redo传输详解
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3