在一次讨论中,以下问题被提出:当我们使用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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




