chain即链。

oracle中链有很多种,LRU、LRUW、checkpoint queue等,都是干什么的呢???

LRU将可用块(干净的块)串起来、LRUW将脏块串起来,指导DBWR进程率先将冷端的块写入磁盘,(buffer cache中的原则是不常访问的块“冲刷”掉,常访问的尽可能保存)也就是说将冷端先变成干净的块,然后串到LRU链上。

但是checkpoint queue作用是什么呢???checkpoint queue主要作用是确定实例崩溃后恢复的起点。数据库掉电、服务器死机均会造成实力崩溃,那么崩溃后会丢数据么,什么样的脏块保存的住,什么样的保存不住呢?答:当实力崩溃恢复后,提交过后的数据会保存住,未提交的事物会回滚。在8i以前,oracle是没有检查点队列,实例恢复完全是靠redo log日志“从头到位”的恢复,这样效率很差,恢复的很慢,当出现checkpoint queue之后确定了恢复的“起点”,那为什么只说“起点”而没有“终点”呢?这里要引出on disk rba,它是redo log日志current状态的最后一条日志也就是在redo log中当前的最近写入的日志,这个就是恢复的终点,所以说终点好找,起点不易啊!

      checkpoint queue确定的是恢复的起点,那它是如何确定的呢?其实checkpoint queue链的块也是脏块,与LRUW链不同的是,它上面链的块是按第一次脏的时间的前后顺序链起来的,而不是按访问的频率。当我们修改数据库中的数据时,修改块会产生日志块的地址,称为RBA(redo buffer address)、LRBA(low redo buffer address)、HRBA。对于脏块,有这三个地址。LRBA是指buffer第一次修改的RBA,就算以后再更改多少次,只要还没有被DBWR进程写入到磁盘中,它的LRBA是不会变的,而HRBA则是最后一次修改的RBA。所以也可以这样说,检查点队列是按LRBA地址链起来的,这样oracle就把最早修改时候的块的信息记录到redo log中了。所以说checkpoint queue链最前部的块就是目前buffer cache中的最早的脏块,这也就是恢复的起点了!CKPT进程有完全检查点和增量检查点,增量检查点会将检查点队列第一个块(最早脏的块)所对应的日志地址(LRBA)记录到控制文件中,当实例恢复时,就会从控制文件中知道恢复的起点了,增量检查点还有一个作用,就是如果发现checkpoint queue过长(也就说明脏块很多),且此时的I/O不是很忙的情况下,这时会触发DBWR进程写脏块,DBWR会优先写checkpoint queue前部分的脏块。但CKPT进程的增量检查点的主要功能还是第一个(三秒一次)。

      当事物提交过后,日志会将log buffer cache中的日志信息通过LGWR进程写入到redo log中,这样就被记录到磁盘了,故实力崩溃,写入到磁盘的信息是不会丢失的,所以当实例恢复时,这些信息就会被恢复,也就是说,提交过后的脏数据,在实例恢复时会被重现在buffer cache中,而未被提交的脏数据是否还会一同被恢复呢,答案是会的,因为它会将从LRBA至on disk rba全部恢复,不论是否提交,但是oracle会自动将未提交的数据回滚。

总结:1.提交的事物,脏块一定会被日志恢复,未提交的事物,也会被日志恢复,但是会被undo表空间回滚。

2.DBWR有两种写方式:写冷端、按检查点队列写较早的脏块。

3.实例恢复,由控制文件中记录的LRBA为恢复的起点,on disk rba为恢复的终点。

oracle实例恢复之检查点队列的更多相关文章

  1. oracle检查点队列与增量检查点【转载】

    oracle检查点队列与增量检查点 今天是2013-09-04,这几天一直心里安顿不下来,今天还好了,可以自己安静的学习一下oracle,在此记录一下学习笔记.这篇文章我不知道在那转载的,一直都留在我 ...

  2. oracle检查点队列(checkpoint queue)

    buffer cache CBC链 按地址链 LRU  干净buffer LRUW  脏buffer  按照冷热 checkpoint queue:链buffer,①链脏块②按buffer第一次脏的时 ...

  3. oracle实例名,数据库名,服务名等概念差别与联系

    数据库名.实例名.数据库域名.全局数据库名.服务名 这是几个令非常多刚開始学习的人easy混淆的概念.相信非常多刚開始学习的人都与我一样被标题上这些个概念搞得一头雾水.我们如今就来把它们弄个明确. 一 ...

  4. OCP知识点讲解 之 检查点队列与增量检查点

    原创 http://blog.chinaunix.net/uid-26762723-id-3271558.html 检查点的主要目的是以对数据库的日常操作影响最小的方式刷新脏块.脏块不断的产生,如何将 ...

  5. Oracle 实例恢复

    -======================= -- Oracle 实例恢复 --======================= 一.Oracle实例失败 Oracle实例失败多为实例非一致性关闭所 ...

  6. Oracle实例名,服务名等概念区别与联系

    数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...

  7. oracle之二检查点

    检查点(checkpoint) 8.1 什么是checkpointcheckpoint是数据库的一个内部事件,检查点激活时会触发数据库写进程(DBWR),将数据缓冲区里的脏数据块写到数据文件中. 8. ...

  8. Oracle实例和Oracle数据库(Oracle体系结构)

    --========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --==================== ...

  9. 【转载】Oracle实例和Oracle数据库(Oracle体系结构)

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:Leshami      原文地址:http://blog.csdn.net/ ...

随机推荐

  1. HTML当中特殊字符的表示

    (回车换行) <br> (空格符)   &(AND符号) & <(左尖括号.小于号) < >(右尖括号.大于号) > °(度) ° •(间隔符) • ...

  2. Odoo Graph 指定默认 类型

    <graph string='Sale Paid Grapg' type="pivot"> <field name='section_id' type=" ...

  3. ImportError: The _imagingft C module is not installed

    添加验证码模块的时候,发布到服务器上居然报了这个错误 ImportError: The _imagingft C module is not installed 然而pillow是已经装在服务器上的, ...

  4. Strom的配置安装

    1.准备环境 1.1配置列表 配置项 版本信息 OS Red Hat   Enterprise Linux Server release 5.5 (Tikanga) IP 192.168.1.191/ ...

  5. iOS TTF文件使用---改变字体

    TTF(True Type Font):是一种字库名称 TTF文件:是Apple公司和Microsoft公司共同推出的字体文件格式 使用: 1 获取字体文件 从各种渠道下载字体ttf,网站或从别的ip ...

  6. MVC无刷新分页(即局部刷新,带搜索,页数选择,排序功能)

    我查看了很多网站,大部分评论分页都是局部刷新的,可大部分电商商品展示分页都是有刷新页面的,于是我便做了一个商品展示无刷新分页的例子.接下来我就将做一个模仿淘宝已买到的宝贝功能,不过我的是无刷新分页的. ...

  7. Html简单介绍

    一.Html 1.万维网的核心语言,高大上称之为超文本标记语言(Html)的第五次修改 2.完成的时间:2014年10月29日 3.我们需要了解有一定高度的知识: WHATWG  WEB超文本应用技术 ...

  8. 【转发】关于Java性能的9个谬论

    转载请注明出处,感谢大家的支持!本文来自优优码:http://www.uucode.net/201502/9%e4%b8%aa%e8%b0%ac%e8%ae%ba Java的性能有某种黑魔法之称.部分 ...

  9. [kuangbin带你飞]专题十 匹配问题 二分匹配部分

    刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...

  10. 微信 {"errcode":40029,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]"}

    {"errcode":,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]" ...