ITPub博客

首页 > 数据库 > Oracle > 切换日志后,logbuffer中所有的数据都得写到redo log中

切换日志后,logbuffer中所有的数据都得写到redo log中

原创 Oracle 作者:RAYSUNNNY 时间:2014-04-02 19:22:30 0 删除 编辑

关于“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博客 ” ,链接:http://blog.itpub.net/29227735/viewspace-1134916/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-12-05

  • 博文量
    38
  • 访问量
    230744