1.什么是并发
2.事务隔离级别
   2.1 READ UNCOMMITTED
   2.2 READ COMMITTED
   2.3 REPETABLE READ
   2.4 SERIALIZABLE
   2.5 READ ONLY
3.多版本读一致性含义
4.写一致性

1.多版本控制是指,Oracle能同时物化多个版本的数据,这也是Oracle提供读一致性的基础。

2.事务隔离级别

不同隔离级别可能允许或不允许的3种现象:

脏读(dirty read)
      你能读取未提交的数据
不可重复读(nonrepeatable read)
      T1和T2时间读取某一行的结果不一样。
幻读(phantom read)
     T1执行查询,T2再执行这个查询,可能增加了一些行。

不可重复读和幻影读区别在于,幻读中,已经读取的数据没有变化,T2比T1有更多的数据满足你的查询条件。
隔离级别 脏读 不可重复读 幻读
READ UNCOMMITTED
READ COMMITTED ×
REPETABLE READ × ×
SERIALIZABLE READ × × ×
账号 账户余额
1 123 $500
2 456 $240.25
….    
342 023 987 $100

select sum(acount_balance) from accounts;

在查询中的某个时刻将$400从123转入987,未提交

不同隔离级别,非Oracle数据库和Oracle数据库的表现

  非Oracle Oracle
READ UNCOMMITTED 先计算一次123账号的$400,(在读123到987期间,发生了转账),读到987的时候,又计算一次$400,发生了重复计算。

脏读了
会从回滚段读987账号旧版本的$100
READ COMMITTED 更新987的时候,对这一行加了排他锁。读到这一行的时候,必须等待提交或回滚完成,才能继续读下去,而等来的结果仍然可能是错误的(如果提交,读到的是$400,那么会对$400计算两次)。

数据的写入者阻塞数据的读取者
由于使用多版本和读一致性,答案总是一样。都从回滚段去读,并且不会被阻塞。
REPETABLE READ
   同一个查询相对于某个时间点返回的结果是一致的

1.得到一致的答案
2.避免丢失更新
低级的共享锁来实现,共享读锁防止其他会话修改我们已经读取的数据。

上面的例子效果就是,T1时刻开始查询,必须等待查询完成,update才能进行。

数据的读取者会阻塞数据的写入者
数据的读取者和写入者可能而且经常会发生死锁
多版本实现提供读一致的答案
Oracle实现读一致性不会带来读写阻塞,也不会导致死锁。Oracle永远不会使用共享读锁。
SERIALIZABLE
   
   

Oracle并发与多版本控制的更多相关文章

  1. Oracle 并发创建索引

    建索引时,我们为了建索引快,会加上并行,加上并行之后,此列索引就会是并行了.访问有并行度的索引时,CBO可能可能会考虑并行执行,这可能会引发一些问题,如在服务器资源紧张的时候用并行会引起更加严重的争用 ...

  2. oracle并发请求异常,运行时间超长(一般情况下锁表)

    1.如果前台无法取消请求出现错误: 则后台更新 update fnd_concurrent_requests    set status_code = 'X', phase_code = 'C'  w ...

  3. oracle多用户并发及事务处理

    多用户并发访问 事务:作用于某些数据的一个不可分割的操作   锁:写锁.互斥锁(仅能被一个进程使用)      读锁.共享锁(可被多个进程使用)   更新丢失 脏读 不可重复读 幻影读   隔离级别: ...

  4. Oracle多用户对一个表进行并发插入数据行操作

    oracle数据库支持多用户间同时对同一个表进行操作,但是数据不一定同步,因为oracle数据库是支持脏数据的,比如A用户删除了表的数据但没有提交,B用户也能查询访问到,如果要避免这种情况只能加锁,A ...

  5. oracle的锁与并发机制

    锁是并发访问的时候用于保护不共享资源不被同时并发修改的机制.oracle锁分为DML锁,DDL锁,内部锁和latch DML锁确保一次只能只有一个人修改某一行(TX锁),而且正在处理一个表时别人不能删 ...

  6. [转]Oracle中INITRANS和MAXTRANS参数

    每个块都有一个块首部.这个块首部中有一个事务表.事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定.这个事务表的初始大小由对象的INITRANS 设置指定.对于表,这个值默认为2(索引的IN ...

  7. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

  8. 使用oracle数据库,多用户同时对一个表进行增加,删除,修改,查看等操作,会不会有影响?

    使用oracle数据库,多用户同时对一个表进行增加,删除,修改,查看等操作,会不会有影响? 1.问题:各操作间或者性能上会不会有影响? 如果有该如何解决? 多用户操作的影响主要是回锁定记录,oracl ...

  9. API Design

    REST API Design Guidelines V 1.0.201208 Draft 5 Last Updated: 08/31/2012 1       简介 本文档旨在规范REST API的 ...

随机推荐

  1. bootstrap学习笔记--bootstrap概览

    HTML 5 文档类型(Doctype) Bootstrap 使用了一些 HTML5 元素和 CSS 属性.为了让这些正常工作,您需要使用 HTML5 文档类型(Doctype). 因此,请在使用 B ...

  2. ORA-01438: 值大于为此列指定的允许精度

    Number的数据声明如下:表示        作用        说明Number(p, s)        声明一个定点数        p(precision)为精度,s(scale)表示小数点 ...

  3. Python之路3【第一篇】Python基础

    本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...

  4. Java集合之HashMap

    1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的).此实现提供所 ...

  5. python和数据科学(Anaconda)

    Python拥有着极其丰富且稳定的数据科学工具环境.遗憾的是,对不了解的人来说这个环境犹如丛林一般(cue snake joke).在这篇文章中,我会一步一步指导你怎么进入这个PyData丛林. 你可 ...

  6. rpm查询命令摘要

    任务 命令 显示软件包的相关信息 rpm -q -i NAME 列出软件包中含有的所有文件 rpm -q -i NAME 列出软件包中含有的配置文件 rpm -q -c NAME 列出软件包中含有的文 ...

  7. Android源代码查看途径

    作为一个android coder,多阅读android源码对提高android开发水平是很有帮助的,那么我们可以通过哪些途径查看android源码呢 1.如果你能够FQ的话可以去android官网查 ...

  8. 视图控制器的View整体上移问题

    最近我朋友代码出现一个问题,我看了下,发现已经是适配iOS那时候的问题了 如果你准备将你的老的 iOS 6 app 迁移到 iOS 7 上,那么你必须注意了.当你的老的 app 在 iOS 7 设备上 ...

  9. angularjs向后台传递数据,与后端进行交互

    angularjs之数据交互 function loadLeftFirstNodes (){ $http.get(sourceUrl,{ params:{ mpId: mpId, visits: ce ...

  10. HTTP Status 400 - Required String parameter 'userName' is not present 错误

    HTTP Status 400 - Required String parameter 'userName' is not present 错误 先mark  有时间详细写 参考链接: https:/ ...