zoukankan      html  css  js  c++  java
  • oracle 隔离性(isolation)

      数据库事务(ACID)中的I指隔离性(isolation):未完成的(也就是未提交的)事务必须不可视。在某个事务进行期间,只有执行该事务的一个会话能看到所做的变化。

      oracle是通过使用还原段来实现隔离性的。还原段(undo)的目的:(1)事务恢复;(2)事务回滚;(3)读一致性

    代码
    SQL>select name,value from v$parameter where name like '%undo%';

    NAME                           VALUE
    ------------------------------ ------------------------------
    undo_management                AUTO
    undo_tablespace                UNDO
    undo_retention                 
    900                 

      

      下面通过update的过程来分析隔离性的实现。

     

       首先,在DML操作影响的所有记录以及关联索引键上放置锁定;接下来会生成重做,此时服务器进程在日志缓冲区中写入即将应用于指定数据块的变化。这个重做生成操作应用于数据块的变化和撤销块的变化,如果列是索引的一部分,也将索引的变化以及保护索引变化的撤销块变化写入日志缓冲区。在生成重做后,完成(1) (2)操作。然后,如上图片如示进行。

    PS:我开始的时候一直不能理解隔离性,即如果没有commit的话,只有执行update的session才能看到变化,其它的session还是看到原来的值。更疑惑的是,当执行commit(只会触发LGWR,并不会触发DBWR)的时候,数据并没有真正写入db files,而其它的session居然可以看到更新的值。直至,了解到撤销段和重定向的使用的时候,才解惑了。

  • 相关阅读:
    SQL Server 2019 新版本
    SQL Server 中的窗口函数(2012 新函数)
    MySQL 学习(二)总体框架 & redo-log 和 bin-log 的介绍
    redis(四)集群(Sentinel)
    HahMap相关问题
    JVM工具使用和Linux-top命令解析
    缓存知识点
    消息队列(六)--- RocketMQ-消息消费
    redis(三)数据类型--位图相关
    分布式哈希一致性
  • 原文地址:https://www.cnblogs.com/gobird/p/1914885.html
Copyright © 2011-2022 走看看