您的位置:首页 > 数据库 > Oracle

Oracle并发控制与事务隔离

2012-09-17 23:14 423 查看
表在被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,并不是当前最新的已提交的数据.

完结
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: