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

  • 相关阅读:
    【luogu P1307 数字反转】 题解
    【luogu P1111 公路修建】 题解
    字符串与正则运算
    Java 正则表达式的总结和一些小例子
    js -history.back(-1)和history.go(-1) 区别
    js
    html _ 提取html片段内的纯文本
    vue-x action 的相互调用
    java通过过滤器 设置跨域允许
    git-搭建企业git服务器
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/4306946.html
Copyright © 2011-2022 走看看