Redo的原理
我們知道,使用者資料通常在Buffer Cache中修改,Oracle通過快取記憶體來提高資料操作的效能。當使用者在Buffer Cache中修改資料時,Oracle並不會立即將變更資料寫出到資料檔案上,因為獨立的離散寫出效率會很低。到目前為止,計算機系統中最容易出現瓶頸的仍然是磁碟的I/O操作,Oracle這樣做的目的是為了減少IO的壓力,當修改過的資料達到一定數量之後,可以進行高效地批量寫出。
大部分傳統資料庫(當然包括Oracle)在處理資料修改時都遵循no-force-at-commit策略。也就是說,在提交時並不強制寫。那麼為了保證資料在資料庫發生故障時(例如:斷電)可以恢復,Oracle引入了Redo機制,通過連續的、順序的日誌條目的寫出將隨機的、分散的資料塊的寫出推延。這個推延使得資料的寫出可以獲得批量效應等效能提升。
同Redo Log Buffer類似,Redo Log File也是迴圈使用的,Oracle允許使用最少兩個日誌組。預設的,資料庫建立時會建立3個日誌組。
sys@NEI> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 1 INACTIVE
2 1 CURRENT
3 1 INACTIVE
當一個日誌檔案寫滿之後,會切換到另外一個日誌檔案,這個切換過程稱為Log Switch。Log Switch會觸發一個檢查點,促使DBWR程式將寫滿的日誌檔案保護的變更資料寫回資料庫。在檢查點完成之前,日誌檔案是不能被重用的。
由於Redo機制對於資料的保護,當資料庫發生故障時,Oracle就可以通過Redo重演進行資料恢復。那麼一個非常重要的問題是,恢復應該從何開始呢?如果讀取的Redo過多,那麼必然導致恢復的時間過長,在生產環境中,我們必須保證恢復時間儘量的短。
Oracle通過檢查點(Checkpoint)來縮減恢復時間。檢查點只是一個資料庫事件,它存在的根本意義在於減少恢復時間。
當檢查點發生時(此時的SCN被稱為Checkpoint SCN)Oracle會通知DBWR程式,把修改過的資料,也就是此Checkpoint SCN之前的髒資料(Dirty Duffer)從Buffer Cache寫入磁碟,在檢查點完成後CKPT程式會相應地更新控制檔案和資料檔案頭,記錄檢查點資訊,標識變更。
在檢查點完成之後,此檢查點之前修改過的資料都已經寫回磁碟,重做日誌檔案中的相應重做記錄對於崩潰/例項恢復不再有用。如果此後資料庫崩潰,那麼恢復只需要從最後一次完成的檢查點開始恢復即可。如果資料庫執行在歸檔模式(所有生產資料庫,都建議執行在歸檔模式),日誌檔案在重用之前必須寫出到歸檔日誌檔案,歸檔日誌在介質恢復時可以用來恢復資料庫故障。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-659582/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- innodb redo原理小結
- 分散式系統原理--日誌技術Redo Log分散式
- 【REDO】Oracle redo undo 學習Oracle Redo
- 【REDO】Oracle redo內部結構Oracle Redo
- 【REDO】Oracle redo advice-sqlOracle RedoSQL
- standby redo log的理解
- oracle的redo和undoOracle
- Redo Log之一:理解Oracle redo logOracle Redo
- MySQL redoMySql
- move和shrink的原理和redo的產生 ,利用rowid的含義實用block個數BloC
- (轉)老白的理解REDO LOG
- redo和undo的區別
- 修改oracle redo log的大小Oracle Redo
- Oracle中的redo copy latchOracle
- Redo wastage產生的原因AST
- Redo Log之二:遷移redo log到不同的儲存路徑
- Oracle Redo and UndoOracle Redo
- redo的等待log file sync和log file parallel write和redo size設定Parallel
- Oracle閃回原理-Logminer解讀redo(r11筆記第17天)Oracle筆記
- Oracle的redo 和undo的區別Oracle
- MySQL的Redo log 以及Bin logMySql
- MySQL中的redo log和checkpointMySql
- redo logfile的維護操作
- Redo Log Buffer的大小設定
- Redo log 的分享與記憶
- Oracle redo解析之-1、oracle redo log結構計算Oracle Redo
- MySQL:Redo & binlogMySql
- mysql之 redo logMySql
- look-into-oracle-redoOracle
- Oracle REDO損壞Oracle Redo
- 簡述REDO操作
- UNDO REDO 區別
- REDO日誌管理
- oracle redo log operationOracle Redo
- 新增redo日誌的時候,錯誤新增了一個節點的redo,怎麼辦?
- oracle中一個事務是如何使用redo的以及redo record和change vector的關係Oracle
- 關於Oracle的redo和undo的理解Oracle
- SQLServer的檢查點、redo和undoSQLServer