关于“alter system switch logfile”后,logbuffer中的所有缓冲日志是否要和buffer cache中的脏块一样写到磁盘中。
在这记载一下几个问题。
alter system switch logfile命令会触发完全检查点,完全检查点会将buffer cache中的脏块写到磁盘中的数据文件中。
一开始我以为在写赃数据前,需要先写对应的日志到磁盘。不然的话,万一脏数据写到磁盘了,logbuffer的数据由于断电丢了。那么以后哪一天做恢复的时候,就会有日志缺失的问题。
?但是上面的想法是错的。
首先要明确一点并不是只有提交了的事务对应的日志会写到磁盘,因为日志是顺序写的。
log buffer的数据丢失没关系,只有logbuffer中的日志数据写入了日志文件,Oacle才会将更新前的值写入undo,然后再更新数据。
比如有一条日志,不论这条记录对应的事务是不是提交了的,它都会将更新前的值写入undo,然后再更新磁盘上对应的数据。?
undo中的数据是用来做flashback这些操作的,提交了的事务,大家都知道,通过rollback命令是回滚不了的,要回退就得用flashback。
如果一个事务commit了,ORACLE会先保证log buffer中对应的日志写到磁盘。这样确保了快速提交,有了日志,就不怕buffer cache中的数据丢失了。
一个事务对应的???redo buffer的东西没有完整写到online redolog的话就没有成功提交,没有成功提交的事务在intance crash掉的话就会回滚。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29227735/viewspace-1134916/ ,如需转载,请注明出处,否则将追究法律责任。