35

这里也有讲解

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 这个两个数据)),然后一起把这些数据返回, 得到的数据就是事务没有修改前的数据。

这样即使有多个事务对这个表进行修改,查询得到的结果依然是事务没有提交前的 原来的数据。 这样就保持了读一致性。

最新文章

  1. 使用U盘安装win7系统
  2. 从不同方面寻找bug
  3. hadoop2 作业执行过程之作业提交
  4. android代码片段一
  5. C语言自带的快速排序(qsort)函数使用方法
  6. EJB
  7. xib和Storyboard 创建Cell的方式
  8. 将 Maven生成的java项目转化为支持 Eclipse IDE的项目
  9. 我是如何理解ThreadLocal
  10. 11 款最好 CSS 框架
  11. iOS 消息推送证书生成方法的简单说明
  12. PHP是干什么用?
  13. Head First设计模式之外观模式
  14. Android开发——使用高级的RecyclerView实现侧滑菜单删除功能(SwipeRecyclerView)
  15. Python3爬虫系列:理论+实验+爬取妹子图实战
  16. CLR via C# 中关于装箱拆箱的摘录
  17. C++ Primer 笔记——动态数组
  18. SSH使用小记
  19. 【Java入门提高篇】Day32 Java容器类详解(十四)ArrayDeque详解
  20. vue使用render渲染&amp;jsx

热门文章

  1. Asp.Net MVC5入门学习系列⑦
  2. Appium Android Bootstrap源码分析之简介
  3. Jmeter性能测试
  4. HubbleDotNet全文搜索数据库组件(二)
  5. [ext/iconv/iconv.lo] Error 1
  6. 【转】 Android用于提示等待的ProgressDialog
  7. Android中怎么去除标题栏详解
  8. XLSTransformer生成excel一个简单的演示示例文件
  9. Date与SimpleDateFormat
  10. 最小的MVC工程