1. 程式人生 > >oracle例項恢復 詳解理論知識

oracle例項恢復 詳解理論知識


例項恢復

當資料庫突然崩潰,而還沒有來得及將buffer cache裡的髒資料塊重新整理到資料檔案裡,同時例項崩潰時正在執行著的事務被突然中斷,則事務為中間狀態,也就是既沒有提交也沒有回滾,這時資料檔案裡的內容不能體現例項崩潰的狀態,這樣關閉資料庫是不一致的。

- 下次啟動例項時,oracle會由smon程序自動進行例項恢復,例項啟動時,smon程序會去檢查控制檔案所記錄的每個線上的、可讀寫的資料檔案STOP SCN 號,資料庫正常執行過程,該STOP SCN 為空,而當資料庫正常關閉時,會進行完全檢查點,並將檢查點SCN 號更新到 STOP SCN中,例項崩潰時 oracle 來不及更新STOP SCN ,則STOP SCN 為空

,當smon發現STOP SCN 是空值時,就知道例項上次沒有正常關閉,因此由smon程序開始例項恢復,

前滾:SMON 例項恢復時,會從控制檔案中找到每3秒觸發的增量檢查點,檢查點佇列的第一個髒資料塊檢查點所對應的RBA地址,於是,smon程序到聯機檔案中找到該檢查點RBA地址,然後從該位置開始往下應用,應用所有的redo 條目到ON DISK RBA(檢查點佇列的最後一個RBA) 就是聯機日誌檔案的最後一條redo。從而buffer cache 裡又恢復了例項崩潰那個時間的狀態。這個過程叫前滾

前滾完畢之後,buffer cache裡既有崩潰時已經提交還沒有寫入資料檔案裡的髒資料塊,也還有事務被突然終止,而沒有提交又沒有回滾的事務所髒的資料塊,前滾完畢後,smon程序立即開啟資料庫,但是,這時的資料庫中還含有那些中間狀態的,既沒有提交又沒有回滾的髒資料塊,這種髒資料塊是不能存在資料庫中的,因為他們沒有被提交必須回滾,開啟資料庫以後,Smon 程序會在後臺進行回滾。

oracle database 10g 會從例項錯誤中自動進行恢復,DBA所需要執行的操作就是正常啟動例項。例項會裝載控制檔案,然後嘗試開啟資料檔案。如果發現數據檔案在關閉過程中不同步,則使用重做日誌組中包含的資訊將資料檔案前滾到關閉時的狀態,然後回退所有未提交的事務處理(因為還原表空間也已前滾)。

· 原因是嘗試開啟的資料庫中的檔案在關閉時不同步

· 是自動執行的

· 使用重做日誌組中儲存的資訊來同步檔案

· 涉及到兩個不同的操作

- 前滾:資料檔案還原到出現例項錯誤之前所處的狀態。

- 回退: 已執行但尚未提交的更改會返回到初始狀態。

例項恢復階段:

要使例項開啟一個數據檔案,資料檔案頭中包含的系統更改號(SCN)必須也資料庫控制檔案中儲存的當前SCN匹配。

如果編號不匹配,例項會應用聯機重做日誌中的redo 資料,並按順序“重做”事務處理,直到資料檔案處於最新狀態。所有資料檔案與控制檔案同步後,就會開啟資料庫,此時使用者可登陸

應用重做日誌後,會應用所有事務處理,使資料庫返回到出現錯誤時的狀態。這通常包含正在進行但尚未提交的事務處理。開啟資料庫之後,會回退那些未提交的事務處理。在例項恢復的回退階段結束時,資料檔案只包含提交的資料。

1.資料檔案不同步

2.前滾(利用redo)

3.檔案中的提交和未提交資料

4.回退(還原)

5.檔案中提交資料

優化例項恢復(FAST_START_MTTR_TARGET是指允許DBA指定資料庫進行崩潰恢復需要的秒數)

在例項為事務處理返回 commit complete (提交完成)之前,在重做日誌組中會始終記錄事務處理資訊。重做日誌組中的資訊確保了在出現錯誤時可恢復事務處理。另外,事務處理資訊還需要寫入資料檔案。由於資料檔案寫過程比重做寫過程要慢很多,因此,資料檔案寫操作通常發生在重做日誌組記錄了資訊之後。(資料檔案隨機寫過程比重做日誌檔案連續寫過程要慢)

每隔三秒,檢查點程序會在控制檔案中記錄關於重做日誌中檢查點位置的資訊。因此,oracle 資料庫認為此時間點之前記錄的所有重做日誌項對資料庫恢復來說都是不需要的。

例項恢復所需的時間指的是將資料檔案由其最後一個檢查點返回到控制檔案中記錄的最新SCN所需的時間。管理員通過設定MTTR(Mean Time To Recovery)目標 (以秒為單位)並通過重做日誌組的大小可控制這個時間。檢查點位置與重做日誌末尾之間的距離,永遠不能大於最小重做日誌組的90%

· 在例項恢復期間,必須將檢查點位置與重做日誌末尾之間的事務處理應用到資料檔案

· 通過控制檢查點位置與重做日誌末尾之間的差異可優化例項恢復。圖中:有條紋的塊未寫入磁碟


oracle進行備份的需要了解的知識:

oracle常見的故障型別:http://blog.csdn.net/wanghui5767260/article/details/20696235

oracle四個重要的後臺程序(DBWR / LGWR / ARCH / CKPT):http://blog.csdn.net/wanghui5767260/article/details/20715809

oracle物理備份和邏輯備份理解:http://blog.csdn.net/wanghui5767260/article/details/20627639