zoukankan      html  css  js  c++  java
  • ORACLE 一致性读原理记录

    什么是一致性读?

    一致性读指的是在从查询那一刻起,中间的变化不予理会。

    举例说明

    比如我有两个帐户A,B. A 有1000块,B有1000快。我查询的时候查询速度比较慢。中间A转500到B账户。

    已经查询到A账户有1000,B账户有1500,这个时候我查询的结果是查询的结果应该是2500还是2000呢?

    正确结果当然是2000。

    这里就设计到oracle一致性查询的问题了.

     

    oracle有两个概念:

    1.SCN,SYSTEM CHANGE NUMBER ,这是一个只会增加的递增数字,存在在ORACLE的数据块中,当某块改变时SCN就会递增。

    2.数据库的回滚段记录事务槽,事务槽是用来分配回滚空间的。如果你更新了某块,事务就写进事务槽里。如果未提交或回滚,

    该块就存在活动事务。数据库读到此块可以识别到这种情况的存在。

     

    image

    oracle 在做一致性读时,首先看发起的scn是否大于当前查询块的scn,如果小于则从回滚段获取前镜像数据。

    如果SCN大于当前查询块的scn,还要确保该块没有活动事务,否则还需要从 前镜像去查找。

    oracle的回滚段,解决了一致性读的问题,又避免了锁,大大增强了数据库的并发能力。

  • 相关阅读:
    转载:configure生成的文件(1.5.3)《深入理解Nginx》(陶辉)
    现场管理
    02 表扫描
    01 成本的含义
    16 计划稳定性与控制
    14 事务处理
    13 SELECT 以外的内容
    12 索引
    11 半联结 & 反联结
    08 分析函数
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/4306946.html
Copyright © 2011-2022 走看看