ORACLE 前滾和回滾
Oracle資料庫是採用“日誌在先”機制的。當我們對資料庫資料進行修改時,並不是立即將修改資料寫入到檔案中,而是寫入到共享記憶體SGA空間中的Buffer Cache裡。同時,將修改的日誌不斷的寫入到SGA中另一塊Log Buffer快取中。有一個後臺程式LGWn不斷的將Log Buffer快取中的日誌內容寫入到online redo log檔案中。
日誌檔案的幾個特點:
首先,日誌檔案的寫入是很頻繁的。LGWn會不斷將日誌資訊從Log Buffer中寫入Online Redo Log;
其次,在日誌檔案上,可以有三個型別的事務事件:
1、事務結束,已經被commit,之後打過checkpoint檢查點。這種事務記錄在Log File上,但是變化資訊已經被DBWn寫入進資料檔案;
2、事務結束,已經被commit,之後沒有打入checkpint檢查點。這種情況下,Log File已經寫入了日誌專案,資料檔案可能包括髒資料,也可能沒有寫入髒資料;
3、事務未結束,沒有commit。這種時候,資料塊Dirty Block上面是有事務槽資訊,表示未結束事務,是不會將資料寫入到資料檔案中。但是,日誌Log Buffer可能將部分未提交的DML操作專案寫入到Log File中;
“前滾和回滾”是Oracle資料庫例項發生意外崩潰,重新啟動的時候,由SMON進行的自動恢復過程。
1、當例項失敗後,SMON首先找到最後SCN記錄的Redo Log File,尋找最後一個打入的Checkpoint。
注:檢查點Checkpoint
檢查點Checkpoint是資料庫一致性檢查的一個標記。簡單的說,就是在這個點上,Oracle保證各個檔案(資料、控制、日誌等)是一致的。檢查點的作用就是在進行例項恢復的時候,告訴SMON程式,這個點之前的內容不需要進行恢復。
2、Oracle會從這個checkpoint position處開始應用日誌檔案進行“前滾”來重演整個操作過程直到例項失敗的那一刻
前滾,就是把已經寫到redo上但是還沒有寫道到datafile上的變化透過讀取redo來寫到datafile上,不論是否提交。
3、開啟資料庫
4、對於沒有進行提交的事物,ORACLE會從Undo表空間中尋找到舊版本SCN的資料塊資訊,來進行SGA中Buffer Cache資料塊恢復。“回滾”未提交的事務。
日誌檔案的幾個特點:
首先,日誌檔案的寫入是很頻繁的。LGWn會不斷將日誌資訊從Log Buffer中寫入Online Redo Log;
其次,在日誌檔案上,可以有三個型別的事務事件:
1、事務結束,已經被commit,之後打過checkpoint檢查點。這種事務記錄在Log File上,但是變化資訊已經被DBWn寫入進資料檔案;
2、事務結束,已經被commit,之後沒有打入checkpint檢查點。這種情況下,Log File已經寫入了日誌專案,資料檔案可能包括髒資料,也可能沒有寫入髒資料;
3、事務未結束,沒有commit。這種時候,資料塊Dirty Block上面是有事務槽資訊,表示未結束事務,是不會將資料寫入到資料檔案中。但是,日誌Log Buffer可能將部分未提交的DML操作專案寫入到Log File中;
“前滾和回滾”是Oracle資料庫例項發生意外崩潰,重新啟動的時候,由SMON進行的自動恢復過程。
1、當例項失敗後,SMON首先找到最後SCN記錄的Redo Log File,尋找最後一個打入的Checkpoint。
注:檢查點Checkpoint
檢查點Checkpoint是資料庫一致性檢查的一個標記。簡單的說,就是在這個點上,Oracle保證各個檔案(資料、控制、日誌等)是一致的。檢查點的作用就是在進行例項恢復的時候,告訴SMON程式,這個點之前的內容不需要進行恢復。
2、Oracle會從這個checkpoint position處開始應用日誌檔案進行“前滾”來重演整個操作過程直到例項失敗的那一刻
前滾,就是把已經寫到redo上但是還沒有寫道到datafile上的變化透過讀取redo來寫到datafile上,不論是否提交。
3、開啟資料庫
4、對於沒有進行提交的事物,ORACLE會從Undo表空間中尋找到舊版本SCN的資料塊資訊,來進行SGA中Buffer Cache資料塊恢復。“回滾”未提交的事務。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30496894/viewspace-1813565/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle回滾溯源Oracle
- Oracle 資料回滾Oracle
- 【UNDO】Oracle系統回滾段說明Oracle
- 入門Kubernetes - 滾動升級/回滾
- 利用oracle的日誌挖掘實現回滾Oracle
- Oracle查詢回滾大事務所需時間Oracle
- 資料庫startup啟動時前滾回滾進行例項恢復的理解資料庫
- Kubernetes:更新與回滾
- Spring Boot 事物回滾Spring Boot
- 關於ORACLE大型事務回滾的幾個點Oracle
- 回滾與撤銷(一)
- Kubernetes:Pod 升級、回滾
- 拉鍊表的建立、查詢和回滾
- MySQL實現事務的提交和回滾MySql
- 深入UNDO回滾段,檢視爭用以及回滾段使用量的估算
- 談談 Git 程式碼回滾Git
- [20181222]如何找出回滾操作.txt
- Spring的事物回滾問題Spring
- 引數fast_start_parallel_rollback調整oracle回滾的速度ASTParallelOracle
- 回滾莫隊學習筆記筆記
- [20140516]取出回滾段資訊.txt
- 實踐資料回滾解決方案
- spring boot 顯示處理事務回滾Spring Boot
- Git回滾程式碼到某個commitGitMIT
- sqlserver遇到回滾事務的操作策略SQLServer
- IDEA程式碼不想提交了,如何回滾Idea
- git遠端分支回滾到指定版本Git
- 關於事務回滾註解@Transactional
- Oracle vs PostgreSQL,研發注意事項(3)- 事務回滾之UPDATE操作解析OracleSQL
- YC一文搞懂MySQL持久化和回滾的原理bmyMySql持久化
- BZOJ4241: 歷史研究(回滾莫隊)
- Spring Data JPA中事務回滾意外RollbackExceptionSpringException
- MySQL死鎖案例一(回滾導致死鎖)MySql
- 淺入Kubernetes(12):Deployment 的升級、回滾
- 不能回滾的Redis事務還能用嗎Redis
- Postgresqlddl在事務中可以回滾,truncate時relfilenode在當前會話會改變SQL會話
- Win10系統怎麼設定回滾時間 win10系統設定回滾時間的方法Win10
- 1.2.11. 任務11: 回滾到其它主機
- 客戶端登陸logout操作,事務回滾客戶端Go