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的回滚段,解决了一致性读的问题,又避免了锁,大大增强了数据库的并发能力。

  • 相关阅读:
    多线程创建方式四种

    归并排序
    Spark调优之--资源调优、并行度调优
    多线程中的上下文切换
    守护线程和本地线程
    线程和进程的区别
    3. 无重复字符的最长子串
    [蓝桥杯][历届试题]连号区间数
    [蓝桥杯][历届试题]蚂蚁感冒
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/4306946.html
Copyright © 2011-2022 走看看