2015-03-27 21:17
楼主 thinker。
来自:网站
5
老师讲的时候是commit的时候就会触发ckpt,然 后lgwr,dbwr等,以前看到的资料是执行alter syatem checkpoint,或者数据开启关闭时会触发ckpt,ckpt触发后会通知dbwr,再是lgwr写,然后刚才网络上查了一下,ckpt触发条件有 以下几点:
1.当发生日志组切换的时候
2.当符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,fast_start_mttr_target参数设置的时候
3.当运行ALTER SYSTEM SWITCH LOGFILE的时候
4.当运行ALTER SYSTEM CHECKPOINT的时候
5.当运行alter tablespace XXX begin backup,end backup的时候
6.当运行alter tablespace ,datafile offline的时候;
请老师帮忙详细分析下ckpt,包括ckpt功能,触发时做了哪些动作,以及准确的触发条件等。
我要回答
赞(0)
提问者采纳
2015-03-27 21:41
谭老师
ckpt的功能:
1.减少实例恢复或介质恢复的时间
2.保证缓存中的脏数据能够有规律的写到磁盘
3.保证在一个一致性关闭的情况下所有被提交的数据能够写到磁盘
触发时做的动作:
1.ckpt向dbwr发送写脏数据到磁盘的信号
2.ckpt更新控制文件中checkpoint 信息
3.ckpt更新数据文件中的checkpoint 信息
触发条件:
1.数据库做一致性关闭时
2.手动执行alter system checkpoint
3.redo log 切换
4.手动执行alter database begin backup
5.发生增量检查点时
详细信息参考:http://docs.oracle.com/cd/E11882_01/server.112/e40540/startup.htm#BABGDACG
共5条回复
-
2015-03-27 22:12
楼主thinker。
多谢回复总结,还问下,数据库启动时检查scn,确定是否进行实例恢复,这里的scn有数据文件头上的和控制文件里记录的scn,请问scn的记录还有什 么进程在记录,lgwr,dbwr写时会更新数据文件头和控制文件的scn么,这样的话又是怎么确定是否进行实例恢复的呢?
回复
-
2015-03-27 22:19
谭老师
回复@thinker。:scn这个概念有点大,不是一两句话可以说清楚的,比如current_scn,checkpoint scn,datafile header scn,总之scn在oracle中是一个不断递增的数字,是为了标识数据的新旧版本,为了最终维持数据的一致性,所以scn会出现在oracle体系结 构中的各个地方,redo log中有,control file中有,datafile header中有,连block中也有,关于scn的具体细节我还是建议你多看看官方文档或者找几篇scn的文章通读一下。
回复
-
2015-03-27 22:26
楼主thinker。
我在网上查到这个:
1,在control file,redo log,data file中都存在SCN值;
2,数据库open时,检查control file中记录的SCN值与数据文件,redo log文件是否一致,如果是,数据库打开,否则,提示错误;假如数据文件SCN值小于control file中的SCN值则提示该数据文件需要介质恢复;
3,redo log 中 存在低SCN,高SCN值两种,当前的redo log文件的高SCN值为无穷大;日志发生切换时,高SCN值更新为系统当前SCN值,新日志文件低 SCN值为前日志文件高SCN值加1,高SCN值仍然为去穷大;数据库发生变化,则写redo log文件,同时SCN值会加1。
4,检查点发生时,CKPT更新数据文件头。
这 么说的话,就是只要数据库是非正常关闭的情况,数据文件跟日志文件的scn会不一致,就会做实例恢复,恢复的时候的起点是数据文件中记录的scn,就是说 假如我一个增量检查点是30分钟一次,距离上次检查点25分钟时数据库非正常关闭了,那么我们这25分钟的所有操作都要redo一遍了?
回复
-
2015-03-27 22:29
楼主thinker。
回复@谭老师: 好的,我再仔细研究下SCN
回复
-
2015-03-27 22:46
谭老师
回复@thinker。:你说的第四点肯定是不对的,控制文件中还有个scn叫last_scn,在数据库打开时这个值为空表示无穷大,一致性关闭的话这 个值是会等于数据库的检查点scn的,所以启动数据库时发现这个值为空那么肯定是要做实例恢复的,你后面举的增量检查点的理解是对的,只是增量检查点不会 30分钟一次,最短的可能就几秒钟时间,数据库做实例恢复时就是从上一次检查点开始恢复的。
回复
实例恢复:
主要看checkpoint scn和last scn 是否一致,检查点有增量检查点,用来减短实例恢复时间。
相关文章
Oracle完全检查点和增量检查点详解:
blog.youkuaiyun.com/l106439814/article/details/7801800
了解Oracle中的scn:
www.cnblogs.com/daduxiong/archive/2010/08/19/1803764.html
Oracle中几种scn的作用:
blog.itpub.net/29515435/viewspace-1126245/
ckpt和scn
chenlin10058.iteye.com/blog/1558474
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28713356/viewspace-1476451/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28713356/viewspace-1476451/