ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 学习v$cache

学习v$cache

原创 Linux操作系统 作者:zhangglen 时间:2009-06-20 00:55:34 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 富文本编辑器
请登录后发表评论 登录
全部评论

注册时间:2009-06-02

  • 博文量
    7
  • 访问量
    24905