Oracle中flush buffer cache和x$bh

对oracle数据库执行alter system flush buffer_cache;指令发现,x$bh表中已经存在的信息并不会被清除。

实验环境:
1.操作系统

  1. [oracle@oracle ~]$ uname -a
  2. Linux oracle.example.com 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
  3. [oracle@oracle ~]$ lsb_release -a
  4. LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
  5. Distributor ID: RedHatEnterpriseServer
  6. Description:    Red Hat Enterprise Linux Server release 6.5 (Santiago)
  7. Release:        6.5
  8. Codename:       Santiago

2.数据库版本

  1. SYS@proc> select * from v$version where rownum=1;
  2. BANNER
  3. --------------------------------------------------------------------------------
  4. Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production


实验过程:

  1. SYS@proc> drop table test purge;
  2. Table dropped.
  3. SYS@proc> create table test as select * from dba_objects;
  4. Table created.
  5. SYS@proc> select file#,dbablk,state from x$bh where obj=(select data_object_id from dba_objects where owner='SYS' and object_name='TEST') order by dbablk;
  6.      FILE#     DBABLK      STATE
  7. ---------- ---------- ----------
  8.          1      93952          1
  9. SYS@proc> shutdown immediate;
  10. Database closed.
  11. Database dismounted.
  12. ORACLE instance shut down.
  13. SYS@proc> startup;
  14. ORACLE instance started.
  15. Total System Global Area 521936896 bytes
  16. Fixed Size                 2254824 bytes
  17. Variable Size            159385624 bytes
  18. Database Buffers         356515840 bytes
  19. Redo Buffers               3780608 bytes
  20. Database mounted.
  21. Database opened.
  22. SYS@proc> select file#,dbablk,state from x$bh where obj=(select data_object_id from dba_objects where owner='SYS' and object_name='TEST') order by dbablk;
  23. no rows selected
  24. SYS@proc> select count(*) from test;
  25.   COUNT(*)
  26. ----------
  27.      86991
  28. SYS@proc> select file#,dbablk,state from x$bh where obj=(select data_object_id from dba_objects where owner='SYS' and object_name='TEST') order by dbablk;
  29.      FILE#     DBABLK      STATE
  30. ---------- ---------- ----------
  31.          1      93952          1
  32.          1      93952          3
  33.          1      93952          3
  34.          1      94668          1
  35. ...省略部分内容...
  36.      FILE#     DBABLK      STATE
  37. ---------- ---------- ----------
  38.          1      97609          1
  39.          1      97743          1
  40.          1      97744          1
  41.          1      97745          1
  42. 318 rows selected.
  43. SYS@proc> alter system flush buffer_cache;
  44. System altered.
  45. SYS@proc> select file#,dbablk,state from x$bh where obj=(select data_object_id from dba_objects where owner='SYS' and object_name='TEST') order by dbablk;
  46.      FILE#     DBABLK      STATE
  47. ---------- ---------- ----------
  48.          1      93952          0
  49.          1      93952          0
  50.          1      93952          0
  51.          1      94668          0
  52. ...省略部分内容...
  53.      FILE#     DBABLK      STATE
  54. ---------- ---------- ----------
  55.          1      97609          0
  56.          1      97654          0
  57.          1      97738          0
  58.          1      97739          0


需要注意的地方:
select file # , dbablk , state from x$bh where obj = ( select data_object_id from dba_objects where owner = 'SYS' and object_name = 'TEST' ) order by dbablk ; 

这里的data_object_id在对表做move后不能替换成object_id。 index rebuild 后都会变化。 X$BH 使用data_object_id
 

实验结论:
oracle数据库执行alter system flush buffer_cache; 只能清除数据缓存,并不能清除BH信息。

并不是不清理,而是标记为0 进行释放

     1     170333           0
     1     170333           0
     1     170333           1
     1     170334           1
     1     170334           0
     1     170335           0
     1     170335           1
     1     170335           0
     1     170336           0
     1     170336           1

4424 rows selected.

sys@RPTTEST> 
 



其他资料:
The possible values of X$BH.STATE are:

0, FREE, no valid block image
1, XCUR, a current mode block, exclusive to this instance
2, SCUR, a current mode block, shared with other instances
3, CR,   a consistent read (stale) block image
4, READ, buffer is reserved for a block being read from disk
5, MREC, a block in media recovery mode
6, IREC, a block in instance (crash) recovery mode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值