Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103105
  • 博文数量: 25
  • 博客积分: 1724
  • 博客等级: 上尉
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-09 10:55
文章分类
文章存档

2014年(1)

2010年(1)

2008年(23)

分类: Oracle

2008-06-23 09:20:49

这一节紧接着上一节来说。

上一节通过实验,我们了解到,块的创建和读取流程,不过只是针对一个会话的,现在我们来看看在一个会话中插入数据之后,同时在另外一个会话查询数据,这样的情况会对块有什么影响。

打开一个新的会话, 然后执行如下命令:

查询表,由于插入数据的事务没有提交,这里在另外的会话中就看不到任何数据,深深体现了ORACLE的多版本一致性

select * from test_gao.t;

 未选定行

查询视图v$bh,看是否有了变化

select file#,block#,class#,status,xnc,objd from v$bh where ts#=12;

      FILE#     BLOCK#     CLASS# STATU        XNC       OBJD
---------- ---------- ---------- ----- ---------- ----------
         1      28089          4 xcur           0      11038
         1      28090          1 cr             0      11038
         1      28090          1 cr             0      11038

         1      28090          1 xcur           0      11038

果然和上一节查询出来的结果不同,多了红色字体标识出来的两行,大家可以看到这两行的STATUS字段值为cr,什么是cr呢?它是Consistency Read(一致性读取)的缩写。从这里可以看出28090这个块被两个会话进行了操作。

在第一个会话中回滚事务会发生什么呢?看下面的操作:

会话1:执行rollback

 SQL> rollback;

回退已完成。

再次查询v$bh视图,看看什么情况

  select file#,block#,class#,status,xnc,objd from v$bh where objd=11038;

     FILE#     BLOCK#     CLASS# STATU        XNC       OBJD
---------- ---------- ---------- ----- ---------- ----------
         1      28089          4 xcur           0      11038
         1      28090          1 cr             0      11038
         1      28090          1 cr             0      11038
         1      28090          1 xcur           0      11038

 结果还是一样,说明在事务回滚之后,块还是处于一致读取的状态。

 

 

阅读(1548) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~