• Oracle 好书 07 ( undo 表空间管理 )


    对于DML语句来说,只要修改了数据块,oracl数据库就会将修改前的数据保留下来,保存在undo segment里,而 undo segment 则保存在 undo 表空间里。

    - DML语句与 undo

      DML 语句执行过程

      1. 在shared pool 里进行解析,从而生成执行计划

      2. 假设根据执行计划, 得出的记录放在10号数据文件的54号数据块里

      3. 服务器进程在 buffer cache 里找到一个可用的undo数据块,如果没有发现, 则到undo表空间里找一

         个可用的undo块,并调入 buffer cache, 假设获得的 undo 数据块号为 24号,位于11号undo数据

         文件里。

      4. 将改变前的值放入11号数据块

      5. 由于 undo 数据块发生了变化,于是产生重做记录,假设重做记录号为120.

      6. 在buffer cache 里找到54号数据块,如果没有发现,从10号数据文件里调入

      7. 将改变后的值存入54号数据块

      8. 由于数据库发生变化,于是产生重做记录,假设重做记录号为121

      9. 控制权返回给用户,如果在sql*plu里执行DML, 则表现为光标返回。

    10. 当用户发出 commit 命令时,触发LGWR进程,将120与121这两个重做记录写入联机日志文件,并将

        54号数据块和11号undo数据块头部所记录的事务状态标记设置为已提交。然后控制权返回用户,

        如果在sql*plus里执行DML操作,则表现为光标返回。

    11. 这个时候,54号数据块以及11号undo块并不一定被DBWn写入数据文件,只有在脏数据块的数量

        达到一定程度才会被写入。

        

      事务只要被提交或回滚,那么该事务所使用的undo块就可以被覆盖。

    - undo 作用 

      提供一致性读,回滚事务,实例恢复。

      一致性读 :

      image

      image

      image

      image

      image

      image

    - 配置 AUM

      先设置 undo_management 参数, 设置为 auto

      然后创建一个undo表空间,并初始化参数 undo_tablespace,这个参数说明数据库当前使用哪个undo

      表空间, 剩下的工作就数据库自动完成了.

      当发生一个 DML 操作时,服务器进程会选择一个 undo segment. AUM采用的是事务绑定 undo segment

      的算法,算法如下:

      image

      image

      image

      image

      image

      image

      image

      image

    - 管理 undo 表空间 

      数据库只能使用一个 undo 表空间, 如果我们改变 undo_tablespace, 这叫做 undo表空间切换。

      image

      alter tablespace undoew retention guarantee;

      alter tablespace undoew retention noguarantee;

      image

      借助 Database Control 所提供的 Undo Advisory 更简单可以判断undo 表空间大小。

  • 相关阅读:
    视图类、二次封装、视图家族、GenericAPIView视图基类、mixins视图6大工具类、generic中的工具视图、路由组件
    单改、整体/局部修改、群改接口
    多表、序列化反序列化、群增单删群删接口
    解析模块
    drf框架
    vue-04
    vue-03
    VUE-02
    vue
    ❥《python入门到入土》全教程❥
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3041716.html
Copyright © 2020-2023  润新知