学习v$cache

v$bh & v$cache 测试

v$bh 和 v$cache 视图,可以查询 buffer cache中缓存的数据块,其中包括脏数据块以及为读一致性构造的cr 块.

本测试就是通过这2个视图,查证oracle 构造的过程.


首先登录数据库,读取test表。

sql>conn zhumz
sql> select * from test;

然后,查询该表的 object_id

sqlplus "/ as sysdba"

SQL> select * from dba_objects where wner='ZHUMZ' and object_type='TABLE' and object_name='TEST';

OWNER                          OBJECT_NAME            OBJECT_ID  OBJECT_TYPE      
------------------------------ --------------------- ----------  ------------------
ZHUMZ                          TEST                        7477  TABLE            


查询 v$bh ,查看 zhumz 读取到 buffer_cache 中的 block

QL> select * from v$bh where bjd=7477;

     FILE#     BLOCK#     CLASS# STATUS        XNC  DIRTY TEMP PING STALE DIRECT NEW       OBJD        TS#
---------- ---------- ---------- ------ ----------  ----- ---- ---- ----- ------ --- ---------- ----------
         1       1489          4 xcur            0  N     N    N    N     N      N         7477          0
         1       1490          1 xcur            0  N     N    N    N     N      N         7477          0

通过 v$cache 查看

SQL> select * from v$cache where file#=1 and block# in (1489,1490);

     FILE#     BLOCK#     CLASS# STATUS        XNC NAME          KIND       OWNER#
---------- ---------- ---------- ------ ---------- ------------- -----------------
         1       1489          4 xcur            0 TEST          TABLE          52
         1       1490          1 xcur            0 TEST          TABLE          52


SQL> select * from v$cache where owner# = (select user_id from dba_users where username='ZHUMZ');

     FILE#     BLOCK#     CLASS# STATUS        XNC  NAME       KIND                OWNER#
---------- ---------- ---------- ------ ----------  -------------------------- ----------
         1       1489          4 xcur            0  TEST       TABLE                   52
         1       1490          1 xcur            0  TEST       TABLE                   52


这时如果zhumz更新这个表:

sql> update test set name='jeny' where id=2;

可以从 v$bh 的 DIRTY 列,查出变脏的数据块

sqlplus "/ as sysdba"
SQL> select * from v$bh where bjd=7477;

     FILE#     BLOCK#     CLASS# STATUS        XNC  DIRTY TEMP PING STALE DIRECT NEW       OBJD        TS#
---------- ---------- ---------- ------ ----------  ----- ---- ---- ----- ------ --- ---------- ----------
         1       1489          4 xcur            0  N     N    N    N     N      N         7477          0
         1       1490          1 xcur            0  Y     N    N    N   
         
  
注意对 status 列来说,buffer cache 里的数据状态是 xcur.,因此这个状态是特定的block针对特定的进程而言的。


这时如果zhumz的另外一个进程,读取 test 表, 以上查询可以看出:

SQL> /

     FILE#     BLOCK#     CLASS# STATUS DIRTY TEMP PING STALE DIRECT NEW       OBJD        TS#
---------- ---------- ---------- ------ ----- ---- ---- ----- ------ --- ---------- ----------
         1       1489          4 xcur   N     N    N    N     N      N         7477          0
         1       1490          1 cr     Y     N    N    N     N      N         7477          0
         1       1490          1 xcur   Y     N    N    N     N      N         7477          0


多了一行,系统为这个新进程构造了 cr (一致性读) block.


附记:

v$cache 单实例数据库默认不会创建,需要自行创建。

创建脚本: ?\rdbms\admin\catclust.sql

测试环境:

   os: windowsxp  db: oracle9204

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/72624/viewspace-606984/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/72624/viewspace-606984/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值