oracle实例恢复之检查点队列
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实例恢复之检查点队列的更多相关文章
- oracle检查点队列与增量检查点【转载】
oracle检查点队列与增量检查点 今天是2013-09-04,这几天一直心里安顿不下来,今天还好了,可以自己安静的学习一下oracle,在此记录一下学习笔记.这篇文章我不知道在那转载的,一直都留在我 ...
- oracle检查点队列(checkpoint queue)
buffer cache CBC链 按地址链 LRU 干净buffer LRUW 脏buffer 按照冷热 checkpoint queue:链buffer,①链脏块②按buffer第一次脏的时 ...
- oracle实例名,数据库名,服务名等概念差别与联系
数据库名.实例名.数据库域名.全局数据库名.服务名 这是几个令非常多刚開始学习的人easy混淆的概念.相信非常多刚開始学习的人都与我一样被标题上这些个概念搞得一头雾水.我们如今就来把它们弄个明确. 一 ...
- OCP知识点讲解 之 检查点队列与增量检查点
原创 http://blog.chinaunix.net/uid-26762723-id-3271558.html 检查点的主要目的是以对数据库的日常操作影响最小的方式刷新脏块.脏块不断的产生,如何将 ...
- Oracle 实例恢复
-======================= -- Oracle 实例恢复 --======================= 一.Oracle实例失败 Oracle实例失败多为实例非一致性关闭所 ...
- Oracle实例名,服务名等概念区别与联系
数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...
- oracle之二检查点
检查点(checkpoint) 8.1 什么是checkpointcheckpoint是数据库的一个内部事件,检查点激活时会触发数据库写进程(DBWR),将数据缓冲区里的脏数据块写到数据文件中. 8. ...
- Oracle实例和Oracle数据库(Oracle体系结构)
--========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --==================== ...
- 【转载】Oracle实例和Oracle数据库(Oracle体系结构)
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:Leshami 原文地址:http://blog.csdn.net/ ...
随机推荐
- word页码上加横线&&word删除单页页眉
word(2010)页码上加横线 插入——>页脚(选择年刊型)——>如图 然后拖住“竖条条”将页码拖到正中间——>点中页脚右击——>选中“表格属性”——>“边框和底纹”— ...
- C++ 画星号图形——空心梯形(核心代码记录)
b=a; ;c<=a;c++) { ;d<=a-c;d++) printf(" "); ;e<=b;e++) ||c==a) printf("*&quo ...
- cocos2d-x test学习[1]
controller.cpp std::function<TestScene*()> callback;//一个是返回值,一个是参数.返回值是TestScene*,参数是()里的东西 Co ...
- ajax同步的实现
if (window.XMLHttpRequest) {// code for IE7, Firefox, Opera, etc. xmlhttp=new XMLHttpRequest(); }els ...
- javascript:算法之数组sort排序
数组sort排序 sort比较次数,sort用法,sort常用 描述 方法sort()将在原数组上对数组元素进行排序,即排序时不创建新的数组副本.如果调用方法sort()时没有使用参数,将按字母顺序( ...
- web项目存数据到数据库,中文乱码,解决过程
first: 排查原因: 打断点,查看到底是在执行存数据库操作之前就已经乱码了,还是存数据库操作后乱码的. 前者解决方案: 在web.xml里面加上: <filter> <filte ...
- Xamarin.Android Binding
0.要绑定的jar库,需要保证编译jar使用的jdk版本,与绑定时xamarin使用的jdk版本一致. 查看编译jar的jdk版本的方法:jar解压后,a.看MANIFEST.MF b. javap ...
- SQL JOIN\SQL INNER JOIN 关键字\SQL LEFT JOIN 关键字\SQL RIGHT JOIN 关键字\SQL FULL JOIN 关键字
SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表 ...
- 给Source Insight做个外挂系列之一--发现Source Insight
一提到外挂程序,大家肯定都不陌生,QQ就有很多个版本的去广告外挂,很多游戏也有用于扩展功能或者作弊的工具,其中很多也是以外挂的形式提供的.外挂和插件的区别在于插件通常依赖于程序的支持,如果程序不支持插 ...
- redis3.2新增属性protected mode
在安装新版redis时(3.2) , 一直出现问题 , 只能本机连接其他机器访问失败 , 后来发现是新版增加了安全机制 在配置文件里可以发现多出了protected-mode这一项 , 如果为yes ...