暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DUMP Block是否会引起Block读入内存?

原创 Kamus 2020-03-12
647

在一次讨论中,以下问题被提出:当我们使用DUMP Block方式进行数据块转储时,是否需要将数据读入内存呢?

这是个常用的操作,可是很少有人思考过这个问题,有了思考还要有方法去验证,这整个过程代表着一个工程师在技术上的成熟。

我们立即动手,通过实例来求解一下这个问题的答案。

(1)重启一下数据库,这样buffer cache中几乎就没什么用户数据了,方便测试。

(2)找一张表看看是在哪个file哪个block里面(测试表,一行数据)。

SQL> select dbms_rowid.rowid_relative_fno(rowid) fno,dbms_rowid.rowid_block_number (rowid) block# from t1;
 
FNO     BLOCK#
---------- ----------
1     103001

(3)T1表在数据文件1中,第一个block是103001,检查v$bh,看看这个block有没有在buffer cache中。

SQL> select count(*)
  2  from v$bh
  3  where file# = 1 and block# = 103001;
 
  COUNT(*)
----------
         0

v$bh视图保存着buffer cache中每一个block的信息,是一个重要视图。

(4)目前buffer cache中没有这个block,做一次dump再看看有没有。

SQL> alter system dump datafile 1 block 103001;
System altered
SQL> select count(*)
  2  from v$bh where file# = 1 and block# = 103001;
COUNT(*)
----------
         0

(5)这就验证了做block dump不会把数据块先读入buffer cache。

(6)继续做一次select看看,这次一定是读进buffer cache了。

SQL> select * from ops$kamus.t1;
SQL> select count(*)
  2  from v$bh
  3  where file# =1 and block# =103001;
  COUNT(*)
----------
         1

这就证明了我们的结论:DUMP Block操作不会引发Block读入Buffer Cache。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论