Oracle并发控制与事务隔离

表在被session1 select时,同时其数据被另一session2访问并进行DML更新时.这2个session分别从哪里获取数据?session1最终显示的是什么?怎么解释? 

  • 这个问题的点是:Oracle多版本与并发的问题,这里也正是Oracle与其他数据库的区别点之一.分2种情况介绍,session1的查询返回在2个select语句中,和在1个select语句中.
  • 根据Oracle默认的事务隔离级别为read committed,此时会产生不可重复读或幻影读,当session1在读取表t1记录r1过程中,session2有表t1记录r1的增,删,改的DML操作,只要session2有提交,当session1再次读取表t1的记录r1时都会在该session获取最新的数据,否则不会显示最新.此时,session1中的数据来自刚刚修改过的最新data buffer或者data buffer没有了则来自被更新过的最新的data file.
  • 另外,当session1进行的是一个很长的select查询,当查询开始读取r1后,session2对该表的最后一行r10000000进行了修改,并进行了提交,但当session1显示到r10000000记录时,虽然session2已经提交,但返回的还是r10000000修改之前的记录,保证数据在session1查询的那一刻一致.此时,session1的select查询数据会来自UNDO,并不是当前最新的已提交的数据.
完结
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值