oracle 事务读一致性(一)
2012-03-08 21:25
399 查看
最后学了oracle有关事务相关的东西,这块确实是比较难,但是既然看了,多少得学习点,在这点随便写写,这块主要是写的一致性读。
oracle中通常情况下有三种读:
第一种:错读(未提交读),就是读到另一个事物修改过的但没有提交的数据,没有实一致性读。
第二种:不可重复读( 读失真)就是对一个事物前后两次读,读出来的值是不相等的,因为它在这两次读的间隔被别的事物修改或者删除,并且提交了。
第三种读:幻想读 某个事务在两次读之间,有另一事务插入新的数据,并提交,而且插入的数据满足查询的条件,导致读到的数据不一样。
oracle读一致性又分为:
1.语句级读一致性(不可重复读)
2.事务级一致性读
语句性一致性读,比如语句在开始执行之前获得当前的scn号为10001,而另个事务T2可能将该块的行进行修改,设置该行所在块的一致性标记,生成的SCN=10002,这种情况就需要应用undo回滚到scn为10001的时刻,即为一致性状态,在单个语句执行期间这个值是不会改变的。
事务级别一致性读,所有数据的状态是在事务起始的状态,除非本事务修改的数据,这样就可以避免了不可重复读和幻想读。
oracle是通过隔离级来实现事务的一致性读,事务级可以通过回滚段能实现一致性读,虽然别人可能修改了,但是可以利用回滚段,把别人修改的给回滚了。
事务级一致性读就得说道串行读所谓串行读就是你一人在读的话,别人修改不影响你读的结果,可以无视别人的修改。虽然对于数据库是生效了,但是对于串行事务,则被无视。
串行读适合用在下面三种情况:
a.大型数据库中大多是小数据集的DML短事务
b.修改同一行的几率非常低的系统.
c.长运行事务主要是只读的系统
这块主要是从回滚段来考虑的,应为串行读是通过回滚段来实现的。
设置隔离级命令
还有一种设置
下面来举一个串行隔离的例子,代码如下
中间用到的是自制事务,相当于重新启动了一个事务,通过例子可以看出,虽然删除了,但是第一个事务仍然可以看到,这块其实在数据库中已经修改了,只是通过回滚段可以看到,最后一提交,再查看,就会发现真正的删除了。
这块当然还有修改,更新,删除等。后面再继续学习。
oracle中通常情况下有三种读:
第一种:错读(未提交读),就是读到另一个事物修改过的但没有提交的数据,没有实一致性读。
第二种:不可重复读( 读失真)就是对一个事物前后两次读,读出来的值是不相等的,因为它在这两次读的间隔被别的事物修改或者删除,并且提交了。
第三种读:幻想读 某个事务在两次读之间,有另一事务插入新的数据,并提交,而且插入的数据满足查询的条件,导致读到的数据不一样。
oracle读一致性又分为:
1.语句级读一致性(不可重复读)
2.事务级一致性读
语句性一致性读,比如语句在开始执行之前获得当前的scn号为10001,而另个事务T2可能将该块的行进行修改,设置该行所在块的一致性标记,生成的SCN=10002,这种情况就需要应用undo回滚到scn为10001的时刻,即为一致性状态,在单个语句执行期间这个值是不会改变的。
事务级别一致性读,所有数据的状态是在事务起始的状态,除非本事务修改的数据,这样就可以避免了不可重复读和幻想读。
oracle是通过隔离级来实现事务的一致性读,事务级可以通过回滚段能实现一致性读,虽然别人可能修改了,但是可以利用回滚段,把别人修改的给回滚了。
事务级一致性读就得说道串行读所谓串行读就是你一人在读的话,别人修改不影响你读的结果,可以无视别人的修改。虽然对于数据库是生效了,但是对于串行事务,则被无视。
串行读适合用在下面三种情况:
a.大型数据库中大多是小数据集的DML短事务
b.修改同一行的几率非常低的系统.
c.长运行事务主要是只读的系统
这块主要是从回滚段来考虑的,应为串行读是通过回滚段来实现的。
设置隔离级命令
1.SET TRANSACTION ISOLATION LEVEL READ COMMITTED;(提交度隔离级) 2.SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; (串行读隔离级) 3.SET TRANSACTION ISOLATION LEVEL READ ONLY;(只读隔离级)
还有一种设置
ALTER SESSION ALTER SESSION SET ISOLATION_LEVEL=SERIALIZABLE; ALTER SESSION SET ISOLATION_LEVEL=READ COMMITTED
下面来举一个串行隔离的例子,代码如下
SQL> create table t ( x int ); Table created SQL> insert into t values ( 1 ); 1 row inserted SQL> commit; Commit complete SQL> set transaction isolation level serializable; Transaction set SQL> select * from t; X --------------------------------------- 1 SQL> SQL> declare 2 pragma autonomous_transaction; 3 begin 4 delete from t; 5 commit; 6 end; 7 / PL/SQL procedure successfully completed SQL> select * from t; X --------------------------------------- 1 SQL> commit; Commit complete SQL> select * from t; X ---------------------------------------
中间用到的是自制事务,相当于重新启动了一个事务,通过例子可以看出,虽然删除了,但是第一个事务仍然可以看到,这块其实在数据库中已经修改了,只是通过回滚段可以看到,最后一提交,再查看,就会发现真正的删除了。
这块当然还有修改,更新,删除等。后面再继续学习。
相关文章推荐
- oracle 事务读一致性
- oracle事务之oracle读一致性
- Oracle事务(Transcations)的一致性
- Oracle core05_事务和一致性
- oracle事务之oracle读一致性
- 闲聊编程与Oracle一致性和“保镖”事务
- Oracle 事务ACID基本概念(原子性、一致性、隔离性、持久性)
- 【ORACLE】事务与一致性:TRN TBL 和ITL基础
- 深入浅出Oracle数据读取一致性和事务表
- 【转载】oracle事务之oracle读一致性 .
- 分布式系统事务一致性解决方案
- Oracle事务处理—隔离级别
- (转)Oracle存储过程中的事务
- oracle 事务测试
- Oracle数据使用事务异常—Command 的 Transaction 属性尚未初始化异常
- spring 事务一致性使用xml配置
- 分布式事务:两段式提交(最终一致性)
- oracle闪回版本和闪回事务查询 详解
- 分布式系统事务一致性
- 对ORACLE 已提交的事务进行回滚之详细版和操作版