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居然可以看到更新的值。直至,了解到撤销段和重定向的使用的时候,才解惑了。

  • 相关阅读:
    RabbitMQ在windows环境下的安装、集群配置
    c# c++通信--命名管道通信
    CreateWindow创建无边框 可拉伸窗体
    jetbrains goland 跳到上一个光标处
    centos 7 install virtualbox
    CentOS 7如何将.deb文件转换.rpm
    golang解析json报错:invalid character 'x00' after top-level value
    linux 查看内存信息,及其他硬件信息 dmidecode命令
    kali 源设置sources.list
    ubuntu linux 1604 编译安装tesseract-ocr 4.0
  • 原文地址:https://www.cnblogs.com/gobird/p/1914885.html
Copyright © 2011-2022 走看看