Oracle并发与多版本控制
| 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并发与多版本控制的更多相关文章
- Oracle 并发创建索引
建索引时,我们为了建索引快,会加上并行,加上并行之后,此列索引就会是并行了.访问有并行度的索引时,CBO可能可能会考虑并行执行,这可能会引发一些问题,如在服务器资源紧张的时候用并行会引起更加严重的争用 ...
- oracle并发请求异常,运行时间超长(一般情况下锁表)
1.如果前台无法取消请求出现错误: 则后台更新 update fnd_concurrent_requests set status_code = 'X', phase_code = 'C' w ...
- oracle多用户并发及事务处理
多用户并发访问 事务:作用于某些数据的一个不可分割的操作 锁:写锁.互斥锁(仅能被一个进程使用) 读锁.共享锁(可被多个进程使用) 更新丢失 脏读 不可重复读 幻影读 隔离级别: ...
- Oracle多用户对一个表进行并发插入数据行操作
oracle数据库支持多用户间同时对同一个表进行操作,但是数据不一定同步,因为oracle数据库是支持脏数据的,比如A用户删除了表的数据但没有提交,B用户也能查询访问到,如果要避免这种情况只能加锁,A ...
- oracle的锁与并发机制
锁是并发访问的时候用于保护不共享资源不被同时并发修改的机制.oracle锁分为DML锁,DDL锁,内部锁和latch DML锁确保一次只能只有一个人修改某一行(TX锁),而且正在处理一个表时别人不能删 ...
- [转]Oracle中INITRANS和MAXTRANS参数
每个块都有一个块首部.这个块首部中有一个事务表.事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定.这个事务表的初始大小由对象的INITRANS 设置指定.对于表,这个值默认为2(索引的IN ...
- Oracle RAC学习笔记:基本概念及入门
Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章] oracle 10g real applica ...
- 使用oracle数据库,多用户同时对一个表进行增加,删除,修改,查看等操作,会不会有影响?
使用oracle数据库,多用户同时对一个表进行增加,删除,修改,查看等操作,会不会有影响? 1.问题:各操作间或者性能上会不会有影响? 如果有该如何解决? 多用户操作的影响主要是回锁定记录,oracl ...
- API Design
REST API Design Guidelines V 1.0.201208 Draft 5 Last Updated: 08/31/2012 1 简介 本文档旨在规范REST API的 ...
随机推荐
- vue自定义指令
Vue自定义指令: Vue.directive('myDr', function (el, binding) { el.onclick =function(){ binding.value(); } ...
- jquery缓存使用jquery.cookies.2.2.0.min.js
$.cookies.set(key, obj, { hoursToLive: 2}); key标识的键 , obj存入的值可以缓存json对象, hoursToLive 缓存小时数 $.cookies ...
- video.js播放mp4文件
HTML5的标签 video 支持的mp4编码为视频编码 H.264 音频AAC 参考网址 http://www.w3school.com.cn/html5/html_5_video.asp 视频格式 ...
- 总结:JSP几种提交表单方法
问题描述: 最近进了一家“老公司”工作,说他老不是说他成立的早,是因为他的编程框架太l.......low了.EJB的规范模式,使用是IBM经过Eclipse二次开发出来的RAD(Rational A ...
- 美团HD(4)-二级联动效果
DJNavDropView.m #import "DJNavDropView.h" #import "DJCategory.h" #import "D ...
- 一个php 字符串判断问题
先看代码 你觉得下面的代码会输出什么结果: <?php $a = "10"; $b = "1e1"; if($a == $b ) { echo " ...
- [老文章搬家] 关于 Huffman 编码
按:去年接手一个项目,涉及到一个一个叫做Mxpeg的非主流视频编码格式,编解码器是厂商以源代码形式提供的,但是可能代码写的不算健壮,以至于我们tcp直连设备很正常,但是经过一个UDP数据分发服务器之后 ...
- nginx 反代理google
./configure \ --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/n ...
- STM32f103 定时器之编码器接口模式
背景 买了个Arduino的旋转编码器模块,配合STM32定时器的编码器模式实现了旋转角度以及圈数的计数.这种旋转编码器我能想到的实际应用场景暂时只有实体音量旋钮,鼠标的滚轮等,所以只实现了计数.阅读 ...
- JS学习:第二周——NO.3盒子模型
1.CSS盒子模型包括四个部分组成:设定的宽高+padding+border+margin: 2.JS盒子模型:通过系统提供的属性和方法,来获取当前元素的样式值 JS提供的属性和方法: clien ...