切換日誌後,logbuffer中所有的資料都得寫到redo log中

RAYSUNNNY發表於2014-04-02

關於“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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章