Oracle 一致读的测试

oracle读一致性分为事务一致读和语句一致读两种,oracle缺省情况下为语句一致读。

事务一致读是指在某一个事务内读的数据不会受其他session修改而改变。

语句一致读是指在某一个时间点读的数据只会是数据库中这个时间点的信息,在读的过程中,若其他session对所读数据做修改将不会被读取。

对于一致读的原理和步骤请参考:http://blog.csdn.net/gybyylx/article/details/6948198

 

下面我们对语句一致读做个测试:

测试方案:开启一个会话,做循环查询输出,在输出过程中睡眠一段时间,在睡眠时间内另一个会话对表数据做修改,观察第一个会话查询结果是否有变化:

 

SQL> create table gyb(id number(10),name varchar2(20));
 
Table created
 
SQL> insert into gyb values(1,'aa');
 
1 row inserted
 
SQL> insert into gyb values(2,'bb');
 
1 row inserted
 
SQL> insert into gyb values(3,'cc');
 
1 row inserted
SQL> commit;
 
Commit complete
SQL> declare
  2  begin
  3  for rs (in select * from gyb)
  4  loop
  5  dbms_output.put_line(rs.id||' '||rs.name);
  6  dbms_lock.sleep(10);
  7  end loop;
  8  end;
  9  /
输出结果:
1 aa
2 bb
3 cc

在上面执行输出的过程中,启动另一个会话做以下修改更新操作并提交,发现上面的输出结果并没有变化。
insert into gyb values(4,'insert');
UPDATE gyb SET NAME='update' WHERE ID=3 ;
commit;

 

结论:在 “3 for rs (in select * from gyb)“这个时间点查询的数据就是数据库中这个时间点的数据,即使在查询完成的过程中,有其他会话做修改,我们也只会查询出这个时间的数据,这就是一致读。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值