oracle事务隔离级别_笔记8:写一致性
写一致性
Oracle可以使用undo信息来提供非阻塞的查询和一致(正确)的读。查询时,Oracle会从缓冲区缓存中读出块,它能保证这个块版本足够“旧”,能够被该查询看到。
但是,这又带来了以下的问题:写/修改会怎么样呢?如果运行以下UPDATE语句,会发生什么。
Update t set x=2 where y=5;
在该语句运行时,有人将这条语句已经读取的一行从Y=5更新为Y=6,并提交,如果是这样会发生什么情况?也就是说,在UPDATE开始时,某一行有值Y=5。在UPDATE使用一致读来读取表时,它看到了UPDATE开始时这一行是Y=5,但是,现在Y的当前值是6,不再是5了,在更新X的值之前,Oracle会查看Y是否还是5。现在会发生什么呢?这会对更新有什么影响?
显然,我们不能修改块的老版本,修改一行时,必须修改该块的当前版本。另外,Oracle无法简单地跳过这一行,因为这将是不一致读,而且是不可预测的。在这种情况下,我们发现Oracle会从头重新开始写修改。
一致读和当前读
Oracle处理修改语句时会完成两类块获取。它会执行以下两步。
.一致读(Consistent read):“发现”要修改的行时,所完成的获取就是一致读。
.当前读(Current read):得到块来实现更新所要修改的行时,所完成的获取就是当前读。
突发事件耽误了时间,开始时已快转点,再加上对TKPROF一无所知,就到这吧
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5225.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
