如何查看buffer cache的脏数据是否写回磁盘
如何查看buffer cache的脏数据是否写回磁盘
paul@TEST(192.168.1.117)> select file_id,block_id from dba_extents where segment_name='TEST1' and ow
ner='PAUL';
FILE_ID BLOCK_ID
---------- ----------
6 273
已用时间: 00: 00: 00.00
paul@TEST(192.168.1.117)> insert into test1 values(4);
已创建 1 行。
已用时间: 00: 00: 00.00
paul@TEST(192.168.1.117)> commit;
提交完成。
已用时间: 00: 00: 00.00
paul@TEST(192.168.1.117)> select file#,block#,dirty from v$bh where file#=6 and block#>273;
FILE# BLOCK# D
---------- ---------- -
6 274 N
6 275 N
6 276 Y --这个就是刚刚产生的数据,可以看commit后没有把数据写入磁盘
6 277 N
6 278 N
6 279 N
6 280 N
已选择7行。
已用时间: 00: 00: 00.00
paul@TEST(192.168.1.117)> alter system switch logfile;
还有alter system checkpoint
--日志切换,触发检查点,调用dbwr进程将脏数据写回磁盘
系统已更改。
已用时间: 00: 00: 00.01
paul@TEST(192.168.1.117)> select file#,block#,dirty from v$bh where file#=6 and block#>273;
FILE# BLOCK# D
---------- ---------- -
6 274 N
6 275 N
6 276 N --已经写回磁盘
6 277 N
6 278 N
6 279 N
6 280 N
已选择7行。
已用时间: 00: 00: 00.00
paul@TEST(192.168.1.117)>
有时我们做了 alter system switch logfile,后,看到的还是y,那是因为checkpoint start还未complete