前滚和回滚的区别
前滾:
???????? 未完全提交的事務,即該事務已經被執行commit命令了,只是現在該事務修改所對應的臟數據塊中只有一部分被寫到磁盤上的數據文件中,還有一部分已經被置為提交標記的臟塊還在內存上,如果此時數據庫實例崩潰了,則當數據庫實例恢復時,就需要用前滾(這個機制)來完成事務的完全提交,即將先前那部分已經被置為提交標記且還在內存上的臟塊寫入到磁盤上的數據文件中。
回滾:
??????? 未提交的事務,即該事務未被執行commit命令。但是此時,該事務修改的臟塊中也有可能一部分臟塊寫入到數據文件中了。如果此時數據庫實例崩潰了,則當數據庫實例恢復時,就需要用回滾(這個機制)來將先前那部分已經寫入到數據文件的臟塊從數據文件上撤銷掉。
注釋:
?????? 實例恢復,就是oracle軟件系統根據數據庫實例崩潰前最后一次檢查點的那一刻到數據庫實例崩潰那一刻期間所做的所有操作(無論該操作是否有提交的,這些操作可以從重做日志上讀取)對該數據庫實例對應的數據庫(特別是數據文件部分做恢復,當然其他配合數據文件的文件,如控制文件,日志文件,也會做相關的恢復修改)進行前滾,即將該期間的操作重做一遍。之后再將其中未提交的操作進行回滾。這里,可能就有人疑問了,為什么前滾時不只做提交的操作,未提交的操作就不要做就好了嘛?因為數據庫實例崩潰前,未被執行commit命令的事務,其所修改的臟塊中也有可能一部分臟塊已經寫入到數據文件中了,所以需要進行回滾操作。
??? 總之,實例恢復時,先做前滾,后做回滾。
??? (疑問)至于為什么不用如下方法就不得而知了?
? ? 該方法具體為,前滾時只做提交的操作,不做未提交的操作,到回滾操作階段時,再去回滾那些(記錄在重做日志里的)未提交的操作。
【前滾和回滾交替進行??--------Recovery在SQL Server啟動時也會發生,在數據庫啟動過程中,SQL Server會檢查事務日志,看是否存在已提交或未提交的事務,如果發現在最后一次檢查點發生后,還有已提交的事務,則SQL Server會對這些事務進行REDO(ROLL FORWARD);而如果發現未提交的事務,則進行UNDO(ROLL BACK)。http://blog.csdn.net/hmzhangfeng/article/details/6338021】
注意: ? 未提交的事務?? ? 提交的事務?? 未完全提交的事務? 完全提交的事務
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 詳見 何明
總結
- 上一篇: 2008年超级计算机排名,2008年Op
- 下一篇: 浅谈电网数字化转型