Erp100论坛's Archiver

xiangzhao 发表于 2008-7-3 20:16

关于检查点的疑问

书上说,一般3秒钟就会把重做日志缓冲区的内容刷到重做日志中。
又说,当一个重做日志写满时,切换到另一重做日志时,会触发一个检查点。
而触发一个检查点就是把脏数据写到磁盘上。
那万一用户并没有commit,也写到磁盘上了?

xiangzhao 发表于 2008-7-3 20:16

不是说一定 要commit,修改的信息才会写到磁盘上。
即使不commit,根据ckpt的机制,也会定期将相关信息刷新到control file,datafile,redo log file中,视具体情况而定。
这样才能在instance crash的时候,根据文件中的相关信息作rollback和roll forward。

xiangzhao 发表于 2008-7-3 20:16

发生checkpoint的时候dirty data是一定被写数据文件的。并且同步所有的数据文件、日志文件、控制文件。
至于没有提交的数据文件是否会被写入这个问题,楼上的诸位有必要先去弄明白什么是 dirty data是什么东西。
很明显大家对date dirty没有一个正确的理解

xiangzhao 发表于 2008-7-3 20:16

checkpoint自Oracle8i以后可以分为full checkpoint,incremental checkpoint。
1. full checkpoint:
   当alter system checkpoint,shutdown normal,shutdown immediate时候触发,此时oracle会将所有的dirty block写入相应的文件。

2. incremental checkpoint:
   正常情况下,ckpt每3秒运行一次,将checkpoint queue中的OLDEST RBA信息写入到控制文件中。其中checkpoint queue的机制大家可以参考文档。alter system switch logfile不会触发full checkpoint。在logfile switch时候,ckpt不仅写控制文件信息,也会将相关信息记入datafile headers。incremental checkpoint只是告诉dbwr进程现在checkpoint queue中最新的RBA,DBWR需要将dirty buffer一直清除到这个最新的RBA为止。CKPT只是将当前DBWR最新写入的位置记入控制文件。DBWR进程会从checkpoint queue中oldest RBA开始清除dirty block,写入成功,并删除checkpoint queue中相应的RBA。Oracle 9i以后,dbwr进程清除dirty blocks后,还会在redo log中写入一条记录信息。

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.