oracle例項恢復的學習理解

winston_DBA發表於2015-04-04
一、例項恢復概述:
例項恢復就是將online redo log裡的記錄應用到資料檔案上,用來重新建立從最近的一次檢查點以後發生的改變。
當管理員嘗試開啟一個非一致性關閉的資料庫時自動發生。

二、例項恢復目的及相關概念
1.目的:
由於oracle資料庫管理資料庫改變的工作原理,資料庫例項失敗後,資料庫的檔案有可能處於非一致狀態。oracle例項恢復就是用來確保發生例項失敗後,資料庫仍然處於一致性狀態。

2.redo thread概念:
一個redo thread是例項產生的所有改變的記錄集。單例項資料庫有一個redo thread,但RAC資料庫有多個redo thread,每個例項對應一個redo 
thread。
3.例項失敗造成資料不一致的根本原因:
當一個事務提交的時候,LGWR將遺留在記憶體中的記錄和事務的SCN寫入到online redo log中。但是,DBWR是在其方便的時候將修改的資料塊寫入
到資料檔案中。因此,沒提交的改變,有可能會暫時留在資料檔案中,或者已提交的改變在資料檔案中不存在,造成資料的不一致。
4.例項失敗可能造成結果
如果一個open狀態的資料庫例項失敗,不管是因為SHUTDOWN ABORT語句還是因為其他的非正常關閉,都有可能造成以下結果:
(1)事務提交的資料塊只存在online redo log中,並沒有寫入到資料檔案中。這些改變需要重新應用到資料庫上。
(2)當例項失敗的時候,資料檔案中包含了沒有提交的改變。這些改變必須回滾以保證事務級一致性。

三、什麼時候進行例項恢復?
1.是否需要進行例項恢復依賴於redo thread。
2.當資料庫例項在讀寫狀態下被開啟,redo thread會在控制檔案中被標記成open狀態。
3.當資料庫例項被一致性關閉,redo thread會在控制檔案中被標記成關閉。
4.如果例項啟動,正常來說redo thread在控制檔案中應該是關閉狀態,此時若發現狀態為open,則需要進行例項恢復。
5.資料庫會在以下情況自動進行例項恢復:
(1)單例項資料庫失敗或者RAC所有例項失敗後,第一次開啟資料庫。這種形式的例項恢復也叫crash recovery。oracle資料庫將在例項恢復的同時恢復線上redo thread。
(2)RAC環境下部分例項失敗,會自動的透過配置中的可用的例項來進行例項恢復。
四、誰負責進行例項恢復?

SMON後臺程式負責進行例項恢復,自動應用online redo。不需要人工的干預。

五、檢查點在例項恢復中的重要性
1.檢查點位置在例項恢復中決定了哪些改變需要應用到資料檔案上。因為檢查點位置可以保證所有SCN值比檢查點SCN值小的改變,都已經儲存到了資料檔案上。
2.檢查點位置由CKPT程式來維護,CKPT定時檢視DBWn對檢查點佇列上的髒塊寫入進度,確認完最後寫入資料檔案的髒塊後,進行檢查點位置更新為最後寫入資料檔案中的髒塊

3.檢查點位置決定了例項恢復的起點。而例項恢復的終點為online redo log中最後寫入的記錄(end of redo thread)

六、例項恢復的階段
1:該階段稱為快取恢復或者前滾,即將online redo log裡的變化全部重新應用到資料檔案上,該階段結束後,資料檔案中同時存在已提交和未提交的資料。
2:該階段稱為回滾或事務恢復,即將失敗前還未提交的變化,進行回滾,保證該階段結束後,資料檔案中只存在已提交的資料。

七、注意
1.例項恢復只需要online redo log和當前的線上資料檔案來同步資料,以此保證他們的一致性。

2.若online redo log損壞,則無法進行例項恢復。
3.若undo 資料損壞,則例項恢復的事務恢復階段將會失敗。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30167136/viewspace-1487151/,如需轉載,請註明出處,否則將追究法律責任。

相關文章