關於INSTANCE RECOVERY過程的理解
關於INSTANCE RECOVERY你要是想說的簡單可以把它描述的十分簡單 就是REDO+UNDO
可是具體ORACLE是如何實現的就不清楚了 下面是幾個人對於這個過程的描述
wanghai---
1. 增量檢查點
在checkpoint queue的基礎上實現了增量檢查點,每3秒發生一次checkpoint heartbeat,記錄dbwr上次寫成功的最大RBA(redo block address)。這樣的話做instance recovery的時候就從這個rba開始,而不是從上次checkpoint scn開始,大大節省了恢復時間。
2. twice scan of redo log
在應用redo之前,redo將會被操作兩次,第一次去掃描哪些redo record需要被應用,因為9i在redo裡新增了dbwr寫資料塊的資訊,所以dbwr發生前的日誌將不會被應用。第二步就是選出需要被應用的日誌然後開始rollforward。
3. rollforward
在做instance recovery時必須先定位到redo log 然後應用所有日誌到datafile,這時候包括了committed和uncommitted的資料。當做完rollward,資料庫就可以open了。
4. rollback
因為rollforward產生了uncommitted資料,所以必須回滾這些資料。這將由smon和on-demand rollback來實現。smon將會掃描undo segment header去標誌所有活動事務為dead,然後會逐漸去回滾這些事務。另外on-demand rollback提供了前臺程式進行rollback,當前臺程式企圖獲得被dead事務佔用row lock,這時候前臺程式將會去undo segment取得before image去回滾這個塊,至於其他被這個dead事務lock的塊就等待smon去回滾。
kamus---
1. 一個資料塊發生更新,必然寫回滾
2. 回滾段的block變化也記錄在redo中
一份未提交的資料必定在回滾中有相應的前映象,任何正常的恢復都一定會把這些變化重新構建出來。
想像一下
1. update事務1更新了block 1
2. 回滾段1記錄了block1的前映象
3. checkpoint
4. update事務2更新了block2
5. 回滾段2記錄了block2的前映象
6. instance crash
現在重啟資料庫
1. 根據redo重新構建block2
2. 根據redo重新構建回滾段2
3. database open
4. SMON用回滾段2的資料回滾block2,SMON用回滾段1的資料回滾block1
最後一步也可能是
在另外一個select檢索到block1或者block2的時候,發現這兩個block的資料都是未提交的,此時再回滾block1和block2。
所以,只要有相應的回滾資料存在,無論什麼時候oracle都可以找到一致的資料,oracle只需要知道這個事務是提交了的還是沒提交了的,而這點在block header ITL中有記錄。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9390331/viewspace-694923/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle RECOVERY_PARALLELISM與instance recovery和medium recovery的關係小記OracleParallel
- 關於協程的理解
- 對於Database recovery的理解Database
- 【Oracle】-Difference between Instance recovery and Crash RecoveryOracle
- 關於db_name,instance_name等近似概念的理解????
- 關於service_name,instance_name的結論性理解
- Overview of Instance and Crash RecoveryView
- Mysql加鎖過程詳解(3)-關於mysql 幻讀理解MySql
- Mysql加鎖過程詳解(2)-關於mysql 幻讀理解MySql
- 關於 Angular 應用的 Bootstrap 過程Angularboot
- 關於事務的儲存過程儲存過程
- RAC筆記之instance recovery筆記
- 關於學習過程中走過的彎路
- 關於定價過程的公式的學習公式
- 關於Entity Freamwork 儲存過程操作儲存過程
- 關於hibernate 和 儲存過程儲存過程
- 關於 DOM 的理解
- 關於Vuex的理解Vue
- 關於servlet的理解Servlet
- 關於-this指向的理解
- 關於DCI的理解
- iOS中關於專案中打包ipa的過程iOS
- 有關於儲存過程的一個笑話儲存過程
- 關於systemui wifi圖示更新過程分析SystemUIWiFi
- 理解Database和InstanceDatabase
- 泊松過程的詳細理解
- oracle instance recovery例項恢復小記Oracle
- 我的理解——關於“ERP過時論”的探討(轉)
- 關於GAN的個人理解
- 關於對Host的理解
- 關於SCN的理解(全面)
- 關於scn的理解 (zt)
- 避坑指南:關於SPDK問題分析過程
- 關於ubuntu安裝中過程遇到問題Ubuntu
- 關於BFC理解
- zt_例項恢復instance recovery相關原理精簡總結(原創)
- faster rcnn中anchor的生成過程理解ASTCNN
- 關於react-native-image-picker使用過程中的坑React