關於Oracle的redo和undo的理解
undo是記錄更改前的一份copy,但你係統rollback時,把這份copy重新覆蓋到原來的資料
redo是每次操作都先記錄到redo日誌中,當出現例項故障(像斷電),導致資料未能更新到資料檔案,則資料庫重啟時須redo,重新把資料更新到資料檔案
redo 記錄了所有操作,用於恢復(redo records all the database transaction used for recovery)
undo 記錄了所有的前印象,用於回滾(undo is used to store uncommited data infor used for rollback)
redo 已遞交的事務,例項恢復時要寫到資料檔案去的
undo 未遞交的事務.
redo的原因是:每次commit時,將資料的修改立即寫到online redo中,但是並不一定同時將該資料的修改寫到資料檔案中。因為該資料已經提交,但是隻存在聯機日誌檔案中,所以在恢復時需要將資料從聯機日誌檔案中找出來,重新應用一下,使已經更改資料在資料檔案中也改過來!
undo的原因是:在oracle正常執行時,為了提高效率,加入使用者還沒有commit,但是空閒記憶體不多時,會由DBWR程式將髒塊寫入到資料檔案中,以便騰出寶貴的記憶體供其它程式使用。這就是需要UNDO的原因。因為還沒有發出commit語句,但是oracle的dbwr程式已經將沒有提交的資料寫到資料檔案中去了。
undo 也是也是datafile, 可能dirty buffer 沒有寫回到磁碟裡面去。
只有先redo apply 成功了,才能保證undo datafile 裡面的東西都是正確的,然後才能rollback
做undo的目的是使系統恢復到系統崩潰前(關機前)的狀態,再進行redo是保證系統的一致性.
不做undo,系統就不會知道之前的狀態,redo就無從談起
所以instance crash recovery 的時候總是先rollforward, 再rollback
redo是每次操作都先記錄到redo日誌中,當出現例項故障(像斷電),導致資料未能更新到資料檔案,則資料庫重啟時須redo,重新把資料更新到資料檔案
redo 記錄了所有操作,用於恢復(redo records all the database transaction used for recovery)
undo 記錄了所有的前印象,用於回滾(undo is used to store uncommited data infor used for rollback)
redo 已遞交的事務,例項恢復時要寫到資料檔案去的
undo 未遞交的事務.
redo的原因是:每次commit時,將資料的修改立即寫到online redo中,但是並不一定同時將該資料的修改寫到資料檔案中。因為該資料已經提交,但是隻存在聯機日誌檔案中,所以在恢復時需要將資料從聯機日誌檔案中找出來,重新應用一下,使已經更改資料在資料檔案中也改過來!
undo的原因是:在oracle正常執行時,為了提高效率,加入使用者還沒有commit,但是空閒記憶體不多時,會由DBWR程式將髒塊寫入到資料檔案中,以便騰出寶貴的記憶體供其它程式使用。這就是需要UNDO的原因。因為還沒有發出commit語句,但是oracle的dbwr程式已經將沒有提交的資料寫到資料檔案中去了。
undo 也是也是datafile, 可能dirty buffer 沒有寫回到磁碟裡面去。
只有先redo apply 成功了,才能保證undo datafile 裡面的東西都是正確的,然後才能rollback
做undo的目的是使系統恢復到系統崩潰前(關機前)的狀態,再進行redo是保證系統的一致性.
不做undo,系統就不會知道之前的狀態,redo就無從談起
所以instance crash recovery 的時候總是先rollforward, 再rollback
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23577591/viewspace-691725/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle的redo和undoOracle
- Oracle Redo and UndoOracle Redo
- 【REDO】Oracle redo undo 學習Oracle Redo
- 關於oracle中的undoOracle
- 深入理解MYSQL undo redoMySql
- SQLServer的檢查點、redo和undoSQLServer
- MySQL中的redo log和undo logMySql
- undo log和redo log
- 深入理解MySQL系列之redo log、undo log和binlogMySql
- 基於Redo Log和Undo Log的MySQL崩潰恢復流程MySql
- MySQL Undo Log和Redo Log介紹MySql
- mysql關於redo事務日誌ib_logfile的理解MySql
- Sqlserver沒有單獨的undo檔案,使用tempdb和redo log來存放undo資料SQLServer
- 淺析MySQL事務中的redo與undoMySql
- 關於Oracle的BLOB和CLOBOracle
- 關於rpc的整理和理解RPC
- MySQL中redo log、undo log、binlog關係以及區別MySql
- MySQL redo與undo日誌解析MySql
- 必須瞭解的mysql三大日誌-binlog、redo log和undo logMySql
- Oracle undo保留時間的幾個相關引數Oracle
- 4.3.2.4 關於CDB UNDO模式模式
- 【REDO】Oracle redo advice-sqlOracle RedoSQL
- 關於 DOM 的理解
- 關於Vuex的理解Vue
- 關於servlet的理解Servlet
- 關於-this指向的理解
- 關於Vue中插槽的理解和總結Vue
- 【REDO】Oracle redo內部結構Oracle Redo
- Python中關於++和—(自增和自減)的理解Python
- 關於HashMap的key重寫hashcode和equals的理解HashMap
- Oracle redo解析之-1、oracle redo log結構計算Oracle Redo
- RxJS進階——關於流的理解和應用JS
- 關於跨域和JSONP的一些理解跨域JSON
- 深度理解vue 關於陣列和物件的更新Vue陣列物件
- 關於oracle的Spool命令Oracle
- 關於協程的理解
- 關於對Host的理解
- 【Mysql】三大日誌 redo log、bin log、undo logMySql
- Oracle redo解析之-4、rowid的計算Oracle Redo