oracle保证读一致性原理
 
1:undo segment的概念
                  当数据库进行修改的时候,需要把保存到以前的old的数据保存到一个地方,然后进行修改,用于保存old数据的segment 就是undo segment。
以前老的东西是可以被覆盖掉的,因为undo segment是一种循环利用的方式。 看下图
 
 
如上图所示:
当oracle开启一个事务对table表中的数据进行修改,修改的那个数据(行数据)会被拷贝到 右图 undo  segment(用圆形表示是因为表示会被覆盖)中,这个时候事务没有提交,在这个时候查询table中的数据,进行全部查询的时候, 当进行全表扫描 扫描到 被事务修改的数据时候,oracle发现这是一条在事务中没有提交的数据,就会到 对应的
undo segment中进行查找以前的数据,这样 只要修改该表的事务没有提交,oracle查询这个表得到的数据就是以前没有修改的数据。 这样就保证了 读一致性。
 
下面这个图是oracle online doc上面的图: 联机文档中的解释为:
 
 
解释上图:  
SCN  (System change  number): 这个号相当于oracle数据库的一个自己 的时钟,用于记录数据改变的时刻。
Rollback  segment和 undo  segment 是同义的。
 
图中 黑色的标记 代表  oracle 中用户有一个事务正在对这两个数据(scn为 10024)进行处理, 当事务开启的时候,oracle会首先把表中的这两个数据拷贝到 undo segment中, 拷贝的这两个数据都带有 各自的 SCN号。 如上图所示,这两个数据的未被修改前的 SCN分别为: 10008 和 10021.
当修改这两个数据的时候 ,会给这两个数据赋予新的 SCN (就相当于一个标记什么时刻修改的这个数据)。这个时候修改这两个数据(SCN为 10008和 10021正在进行),事务正在进行没有提交。
 
查询的执行的sql语句也会有一个SCN(这个SCN是这个表最后一次修改提交的SCN)
这个时候 ,有一个查询需要对这个表进行全表扫描(select  *  from  table_name) , 开始执行查询的时候会有一个 SCN号,然后对这个表进行全表扫描,当扫描 的时候,oracle会用当前查询的SCN和这个表中每个数据的SCN号进行比较,如果这个数据的SCN小于<查询的SCN号,证明这个数据当前没有修改,如果这个数据的
SCN >大于 当前查询的SCN号,表示这个数据在当前查询时刻正在有事务对这个数据进行修改,这个时候查询会到对应的undo segment中查找,SCN< 当前查询的SCN的数据(也就是事务修改前的数据(这里指 10008 和 100021 这个两个数据)),然后一起把这些数据返回, 得到的数据就是事务没有修改前的数据。
这样即使有多个事务对这个表进行修改,查询得到的结果依然是事务没有提交前的 原来的数据。 这样就保持了读一致性。

oracle如何保证读一致性 第一弹的更多相关文章

  1. oracle如何保证读一致性 第二弹

    Oracle之数据库一致性读的原理 在Oracle数据库中,undo主要有三大作用:提供一致性读(Consistent Read).回滚事务(Rollback Transaction)以及实例恢复(I ...

  2. oracle保证读一致性原理

    35 这里也有讲解 1:undo segment的概念 当数据库进行修改的时候,需要把保存到以前的old的数据保存到一个地方,然后进行修改,用于保存old数据的segment 就是undo segme ...

  3. ORACLE 物理读 逻辑读 一致性读 当前模式读总结浅析

    在ORACLE数据库中有物理读(Physical Reads).逻辑读(Logical Reads).一致性读(Consistant Get).当前模式读(DB Block Gets)等诸多概念,如果 ...

  4. Mysql(三)------事务的特性、事务并发、事务读一致性问题

    1 什么是数据库的事务? 1.1 事务的典型场景 在项目里面,什么地方会开启事务,或者配置了事务?无论是在方法上加注解,还 是配置切面 <tx:advice id="txAdvice& ...

  5. Oracle core05_事务和一致性

    事务和一致性 oracle的redo和undo机制保证了数据库的ACID特性,以及高性能和可恢复特性. redo的数据是记录着数据块变更的顺序的正向数据流, commit时,保证redo同步持久化,保 ...

  6. 深入解读阿里云数据库POLARDB核心功能会话读一致性

    POLARDB架构 我们知道,POLARDB是一个由多个节点构成的数据库集群,一个主节点,多个读节点.对外默认提供两个地址,一个是集群地址,一个是主地址,推荐使用集群地址,因为它具备读写分离功能可以把 ...

  7. 我的长大app开发教程第一弹:Fragment布局

    在接下来的一段时间里我会发布一个相对连续的Android教程,这个教程会讲述我是如何从零开始开发“我的长大”这个Android应用. 在开始之前,我先来介绍一下“我的长大”:这是一个校园社交app,准 ...

  8. Java基础-程序流程控制第一弹(分支结构/选择结构)

    Java基础-程序流程控制第一弹(分支结构/选择结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.if语句 1>.if语句的第一种格式 if(条件表达式){ 语句体: ...

  9. JVM第一弹

    JVM第一弹 基本概念 JVM是可运行java代码的假想计算机,包括一套字节码指令集,一组寄存器,一个栈,一个垃圾回收.堆和一个存储方法域.JVM是运行在操作系统之上的,它与硬件没有直接的交互. 运行 ...

随机推荐

  1. (转)Centos 7.3 用户和组管理

    Centos 7.3 用户和组管理 原文:http://blog.csdn.net/github_39069288/article/details/73306489 3.1 用户和密码配置文件 pas ...

  2. asp.net 多语言 在IIS7.5发布出现找不到资源文件

    我也遇到这个问题,纠结了半天, 最后把资源文件的属性改为:内容 就可以了. 见:http://q.cnblogs.com/q/60443/

  3. 不同ORM新的理解

    对于ORM你怎么理解?你用过的ORM有什么区别?这是面试的时候基本上会问的问题. 问题很简单,本文不在阐述.本文主要讨论Dapper 和 EF Core First的区别. 从直观上来看两个都是ORM ...

  4. js的加密和解密

    最近在研究js的加密和解密的问题,上网上搜出来很多方法,不过不知道到底哪一个会比较管用.这里是今天找到的一些关于base64加密解密的js代码,已经经过试验,可以使用,不过网上很多加密解密的工具,这种 ...

  5. IDEA安装及基本配置

    IDEA基本介绍 IntelliJ IDEA是JetBrains公司开发的一款开发Java的开发工具,简称IDEA,JetBrains公司还有其他几款优秀的开发工具. IDEA是一款收费软件,在财力允 ...

  6. Windows使用MySQL数据库管理系统中文乱码问题

    声明:本文关于MySQL中文乱码问题的解决方案均基于Windows 10操作系统,如果是Linux系统会有较多不适用之处,请谨慎参考. 一.MySQL中文乱码情况 1. sqlDevelper远程登陆 ...

  7. java校验maven下载的jar文件

    有时候maven真的很坑! 有时候提示invalid LOC header (bad signat signature), 但又有时候什么都不提示,工程报错,情况有肯多中,不知道大家遇到过几种诡异的. ...

  8. 转:error LNK2005: ...already defined in MSVCRTD.lib

    编译错误: Error1error LNK2005: _CrtSetCheckCount already defined in MSVCRTD.lib(MSVCR110D.dll)\libcmtd.l ...

  9. python爬虫之路——初识爬虫原理

    爬虫主要做两件事 ①模拟计算机对服务器发起Request请求 ②接收服务器端的Response内容并解析,提取所需的信息 互联网页面错综复杂,一次请求不能获取全部信息.就需要设计爬虫的流程. 本书主要 ...

  10. 数据分析R&Python-Rpy2包环境配置

    Rpy2环境配置 最近想将R整合到以flask为后端框架的web系统中,在服务器端做数据统计分析.需要将R语言整合到Python中,发现Python中的Rpy2可以调用R语言,所以花了一些时间配置了一 ...