问题:Dump Block会否触发脏数据写入磁盘?
我们尝试一个不同的工具BBED。BBED(Oracle Block Browser and Editor)工具是Oracle内部提供的数据块级别查看和修改工具。借助这个工具,我们可以方便的查看Oracle块block级别的存储细节信息,更好地了解Oracle Internal结构的技术细节,DBA们应当了解这个工具的简单使用方法。
掌握尽量多的工具,会让我们具备选择的基础,这也是DBA的基本技能要求。
首先亮出结论:Dump Block不会引起Buffer cache中的脏数据回写入磁盘。然后我们使用bbed工具来验证一下。
(1)创建一个测试表。
SQL> CREATE TABLE t (n NUMBER); TABLE created
复制
(2)插入一条数据,提交,然后强制checkpoint。
SQL> INSERT INTO t VALUES(1); 1 ROW inserted SQL> commit; Commit complete SQL> ALTER system checkpoint; System altered
复制
(3)此时这条数据一定已经写回磁盘,这个无需验证,继续插入另外一条数据,提交,但是不checkpoint。
SQL> INSERT INTO t VALUES(2); 1 ROW inserted SQL> commit; Commit complete
复制
(4)此时这条脏数据在buffer cache中,我们可以通过dump block来验证。
block_row_dump: tab 0, row 0, @0x1f9a tl: 6 fb: --H-FL-- lb: 0x1 cc: 1 col 0: [ 2] c1 02 tab 0, row 1, @0x1f94 tl: 6 fb: --H-FL-- lb: 0x2 cc: 1 col 0: [ 2] c1 03 end_of_block_dump
复制
(5)通过dbms_rowid包取得T表中记录的文件号和block号,本例中取得是file#=58, block#=570。
(6)关键步骤到了,现在我们要用bbed来获取磁盘上的数据块内容,然后跟dump block的结果比较一下。
创建一个filelist文件,命名为files.lst。
$ cat files.lst 58 /fin/u06/cnctest2data/system12.dbf 1048576000
复制
创建一个参数文件par.bbd,用以被bbed调用。
$ cat par.bbd blocksize=8192 listfile=/home/oraaux/files.lst mode=browse 执行bbed。 $ bbed parfile=par.bbd Password: BBED: Release 2.0.0.0.0 - Limited Production on Mon Mar 13 17:35:32 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. ************* !!! For Oracle Internal Use only !!! *************** BBED> set dba 58,570 DBA 0x0e80023a (243270202 58,570) BBED> x /*rn rowdata rowdata[0] @8182 ---------- flag@8182: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@8183: 0x01 cols@8184: 1 col 0[2] @8185: 1 --只有一条记录,值是1 tailchk @8188 ------- BBED-00210: no row at this offset
复制
到目前为止我们已经验证了dump block并不会把脏数据写回磁盘,为了看一下checkpoint的效果,我们继续往下。
(7)做checkpoint
SQL> ALTER system checkpoint; System altered
复制
(8)再次运行bbed。
$ bbed parfile=par.bbd Password: BBED: Release 2.0.0.0.0 - Limited Production on Mon Mar 13 17:35:32 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. ************* !!! For Oracle Internal Use only !!! *************** BBED> set dba 58,570 DBA 0x0e80023a (243270202 58,570) BBED> x /*rn rowdata rowdata[0] @8176 ---------- flag@8176: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@8177: 0x02 cols@8178: 1 col 0[2] @8179: 2 --这是后来插入的记录,值是2 rowdata[6] @8182 ---------- flag@8182: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@8183: 0x01 cols@8184: 1 col 0[2] @8185: 1 --这是第一条记录,值是1 tailchk @8188 ------- BBED-00210: no row at this offset
复制
checkpoint将buffer cache中的脏数据写回数据文件了。
最后修改时间:2020-03-12 21:07:46
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
778次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
657次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
583次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
541次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
527次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
507次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
490次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
462次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
379次阅读
2025-05-05 19:28:36