Oracle dirty block的一些探讨(二)

继续前面的话题:
现在讨论第二种情况:
如果block在buffer cache中发生了变化(也就意味着dirty block),执行alter system flush buffer_cache是否也会将此block刷新至数据文件?
依然用bbed定位至block 15511 offset 8185中
BBED> set block 15511 offset 8185
BLOCK# 15511
OFFSET 8185
为了观察效果,将zzz用bbed物理修改成ttt
BBED> modify /c ttt
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /oradata/mcstar/zhoul01.dbf (0)
Block: 15511 Offsets: 8185 to 8191 Dba:0x00000000
------------------------------------------------------------------------
74747405 067757

<32 bytes per line>

BBED> sum apply
Check value for File 0, Block 15511:
current = 0x9978, required = 0x9978

由于block 15511在buffer cache中依然存在,我们可以看到选择结果依然是zzz。
SQL> select * from zhoul;

I NAME
---------- --------------------
1 zzz
2 bbb
3 ccc
现在在buffer cache中将zzz该为yyy,由于我们采用正规做法修改字段,Oracle认为block已处于dirty状态。
SQL> update zhoul set name='yyy' where name='zzz';

1 row updated.

SQL> commit;

Commit complete.
执行buffer cache刷出,观察block 15511是否刷出至数据文件中。
SQL> alter system flush buffer_cache;

System altered.
将yyy转储为16进制格式797979
SQL> select dump('yyy',16) from dual;

DUMP('YYY',16)
----------------------
Typ=96 Len=3: 79,79,79

[color=red]用bbed物理查看,可以看到747474已被797979替换[/color]
BBED> dump block 15511 offset 8185
File: /oradata/mcstar/zhoul01.dbf (0)
Block: 15511 Offsets: 8185 to 8191 Dba:0x00000000
------------------------------------------------------------------------
79797902 063f64

<32 bytes per line>

通过以上实验我们可以推断出:
[color=red]当Oracle 认为block在内存中处于dirty状态时,当执行内存刷出时,会将其写入数据文件中。[/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值