首页 > 其他 > 详细

the question of yongyou

时间:2014-03-12 09:42:52      阅读:309      评论:0      收藏:0      [点我收藏+]

问题:会话1,查询一部分数据会话2, 修改数据并提交

会话2在会话1完成之前已经完成

那么会话1得到的数据是新的还是旧的?



答案:

旧的

因为oracleconsistent read的特性,会话1t1时间点查询的数据,应该是在t1时刻存在的数据

所以说,不管会话2如何修改数据,那么会话1因为会分配一个SCN号,查询到的数据的data block都会是时间点1的数据。

所以,查询的数据应该是时间点t1的,而不是会话2提交的数据



Done

其实我在这个部分还是有疑问的,我很奇怪oracle具体是怎么实现一致性读的



其实这个问题在oracle官方文档里,有确定的答案,the exactly answer


In the read commited isolation level,thispoint is the time at which the statement was opened.For example ,if a SELECTstatement opens at SCN 100,then this statement is consistent to SCN 100



这时会比较select语句中scn号和db_buffer中的数据块头部的scn


Select语句确实是有一个SCN



一个select语句初始化的时候,oracle会给它添加一个实时的SCN号,查询的结果将会是在这个SCN点上的数据




当用户执行一条SELECT语句时,ORACLE为它分配一个SCN。该查询语句在搜索需要的数据的数据块时,只会读取SCN小于或等于该SCN的数据块。




本文出自 “原歌轩” 博客,请务必保留此出处http://yuangeqingtian.blog.51cto.com/6994701/1373545

the question of yongyou,布布扣,bubuko.com

the question of yongyou

原文:http://yuangeqingtian.blog.51cto.com/6994701/1373545

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!