checkpoint,即检查点,对于初学者来说其意义也许难以理解,其实我们可以把检查点看成一个数据库的事件,要探究这个事件存在的意义,首先有必要研究一下在修改数据库中的数据时,Oracle做了什么工作。
当我们修改数据库中的数据时,Oracle首先会把这些修改的数据读入内存database buffer cache中,在修改数据的同时, Oracle会将那些修改的数据顺序地写入到redo log file中,也就是一条一条的redo entry,这些redo信息是用来进行数据库恢复的。因为有了redo 的存在,Oracle无需在发出commit的时候急着将修改的数据立刻写回到磁盘中,这样的话效率会非常低。redo的存在就是为了在数据库崩溃之后,数据得以恢复。试想一下如果数据库在运行的过程中由于断电crash掉了,那么那些在内存中修改过的数据,并且还没来得及写入到文件中的数据就会丢失。在下次数据库启动的时候就要进行恢复了。首先,Oracle会通过redo log file中记录的信息进行事务重演,即前滚,这时候数据库中包含了提交的数据和没有提交的数据,完成了前滚之后,数据库就会打开以供用户使用,然后Oracle就会进行回滚,也就是把数据库中没有提交的数据回滚掉,这样数据库中就只剩下那些提交了的数据。当然,数据库恢复的时间越短越好,这样数据库就可以尽快地正常使用。那么是什么决定了数据库恢复的时间呢?答案就是检查点发生的频率。
当检查点发生的时候,Oracle就会通知后台进程DBWR把database buffer cache中修改过的数据,即dirty buffer写入到磁盘中,写完之后,CKPT会更新数据文件头和控制文件,记录checkpoint信息,标识变更。有了检查点事件,当数据库进行恢复的时候,redo log file中检查点之前的事务就不用被应用到了,因为它们已经被写到磁盘中了,这样可以缩短数据库恢复的时间。
所以,检查点存在的意义很简单,就是缩短崩溃恢复的时间。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29800581/viewspace-1249265/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29800581/viewspace-1249265/