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,并不是当前最新的已提交的数据.
完结
这个问题的点是: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,并不是当前最新的已提交的数据.
完结
相关文章推荐
- JDBC Oracle事务隔离(并发控制)
- Oracle的并发控制(事务)
- 并发控制与事务隔离
- 关系数据库的事务隔离、锁定与并发控制
- Oracle 起步日记(9)——事务与并发控制
- 事务并发控制、隔离级别及JDBC事务
- SQL事务的四种隔离级别和MySQL多版本并发控制
- informix的事务、并发控制、锁机制、隔离级别
- 事务并发控制、隔离级别及JDBC事务
- Oracle事务之一:锁和隔离
- oracle 学习笔记(十) 事务控制语句
- Hibernate多事务并发访问控制
- 对事务与并发控制的认识
- oracle事务的隔离
- DB2和 Oracle的并发控制(锁)比较
- 事务并发控制和锁机制
- DB2和 Oracle的并发控制(锁)比较
- 数据库并发事务控制 二:mysql数据库锁机制
- oracle数据一致性和事务控制
- DB2和 Oracle的并发控制(锁)比较