绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
DBWn跳过高RBA位于LGWR的on-disk RBA之上的块,将其放入DBWn的等待队列中。其后,检查
2020-06-28 19:25:28
DBWn跳过高RBA位于LGWR的on-disk RBA之上的块,将其放入DBWn的等待队列中。其后,检查点位置发生过变化,如果此时停电,这些在等待队列中的块,如何被恢复? http://www.ixora.com.au/notes/redo_write_triggers.htm 看上面文章中的第四点,有一点疑问: 4. 当DBWN需要写一个或更多的块,而这些块的高RBA位于LGWR的on-disk RBA之上,从8I开始,它就先把这些块放到它的延迟写队列里,然后催促LGWR去同步更高的高RBA,但是它不会等待,相反DBWN继续执行其它不需要进行延迟的写进程。而在8I之前的版本,DBWN在这种情况下常常会进入休眠状态,并出现log file sync wait 事件 说的是:dbwr 需要写dirty block写到datafile,在写之前,它去通知LGWR去写这些block 到日志,可是,lgwr正在忙着写RBA 比这些block 的RBA低的block呢。那么dbwr并不等待LGWR完成,而是把这些信息放入DBWn的等待队列,自己就去忙别的去了 问题是: DBWn跳过高RBA位于LGWR的on-disk RBA之上的块(假设此块是A),应该是继续写检验点队列后面的块,检查点位置(checkpoint position)会由CKPT每三秒一次写进控制文件,假如此时的检查点位置已经高于块A,而块A对应的重做块还没有被LGWR写进日志,哪么块A更加没有被DBWn写进数据文件,也就是说块A还在DBWn的等待队列里面。如果此时停电了,由于检查点位置高于块A,Oracle进行事例恢复时是从检查点位置处开始,哪么块A如何能得到恢复呢?
分享好友

分享这个小栈给你的朋友们,一起进步吧。

调试数据库 ---- 源码研究方法论
创建时间:2020-06-16 17:28:11
能让你坚持下去的源码学习方法 ---- 调试数据库。Oracle的各种DUMP、Trace和Event,增加了研究这个数据库的“乐趣”,使用Oracle成为一个可研究的数据库。开源数据库当然也可以通过钻研源码的方式去研究,但这样的学习周期太长。本课程教你用调试技术不断为MySQL/PostgreSQL扩展功能,在学习源码的同时,不断开发自己的、类似Oracle DUMP、Trace、Event的小工具,这就是我所说的“正向反馈”。用正向反馈,激励自己坚持下去,终成功。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • vage
    栈主

小栈成员

查看更多
  • 叶子,你好
  • 小雨滴
  • 潘佳伟
  • 东风快递
戳我,来吐槽~