zoukankan      html  css  js  c++  java
  • Undo Segment/Undo Retention

    undo_retention简单定义,就是最多数据的最少保留时间。AUM模式下,undo_retention参数用于事务commit后undo数据保留的时间。单位为秒。这是个no guarantee的限制。也就是,若空间足够,他只是个‘花瓶’;当可用空间不足而又有事务需要回滚空间,则这些数据依然会被覆盖。这个行为可能会导致ORA-01555错误,这些数据被记忆的时间可用v$undostat里面的字段TUNED_UNDORETENTION来查询。

    UNDO主要用于以下方面:
    1.在执行rollback语句的时候rollback事物
    2.恢复数据库
    3.提供读一致性
    4.为oracle flashback query提供支持
    5.使用oracle flashback特性恢复数据库逻辑失败

    一般来讲事物的undo信息存储在回滚段中,事物的undo信息一直存在,直到一个commit或者rollback语句执行。自动回滚段管理允许DBA指定oracle数据库保留多久的commit之后的undo信息。防止在长时间的查询产生ora-01555:snapshot too old.通过设置UNDO_RETENTION参数来达到这个目的,默认是900s(15min).可以设置这个参数保证数据库保留undo日志的时间.设置UNDO_MANAGEMENT = AUTO参数就可以设置自动管理回滚段特性。

    undo段中的区有以下三种状态:
    Unexpired Extents – Undo data whose age is less than the undo retention period.
    Expired Extents – Undo data whose age is greater than the undo retention period.
    Active Extents – Undo data that is part of the active transaction.
    以下介绍oracle是怎么利用undo回滚段的:
    第一步.当需要回滚段的时候,一个undo信息需要被写入到回滚段中。如果当前使用区已经不足,并且下一个区是expired状态,优先使用expired状态的区,而不是从空闲区间池中产生一个空闲的区间。
    第二步.如果第一步由于没有可用的区间而失败,并且undo数据文件不是自动扩展的。则oracle试图去利用另一个回滚段的expired状态区间。
    第三步.如果第二步由于其他回滚段没有expired状态的区间,则oracle试图去利用当前回滚段的unexpired区间
    第四步.如果第三步仍然失败,则oracle视图利用另一个回滚段的unexpired状态区间
    第五步.如果以上全部失败,则an Out-Of-Space error 就会产生。
    以下实验:
    SQL> select tablespace_name, status, sum(blocks) * 8192/1024/1024/1024 GB from dba_undo_extents group by tablespace_name, status;

    TABLESPACE_NAME STATUS GB
    ------------------------------ --------- ----------
    UNDOTBS1 UNEXPIRED .010742188
    UNDOTBS1 EXPIRED .015014648

    SQL> update t1 set name='eeeee' where id=5;

    SQL> select tablespace_name, status, sum(blocks) * 8192/1024/1024/1024 GB from dba_undo_extents group by tablespace_name, status;

    TABLESPACE_NAME STATUS GB
    ------------------------------ --------- ----------
    UNDOTBS1 UNEXPIRED .009765625
    UNDOTBS1 EXPIRED .015014648
    UNDOTBS1 ACTIVE .000976563
    Undo Blocks per Second

    参考资料:

    http://blog.itpub.net/17203031/viewspace-774498/

    http://blog.itpub.net/17203031/viewspace-774565/

  • 相关阅读:
    orm 锁 和 事务
    多表查询
    django 单表查询
    djgango装饰器
    几个SQL命令的使用
    怎么成为优秀的软件模型设计者?
    jbpm 工作流(二)
    Jbpm工作流(一)
    EJB 介绍
    JNDI 使用
  • 原文地址:https://www.cnblogs.com/heyang78/p/11683762.html
Copyright © 2011-2022 走看看