Oracle恢複內部原理(介質恢複)

來源:互聯網
上載者:User

介質恢複用在丟失或損壞資料檔案或者丟失了控制檔案的情形。介質恢複將還原的資料檔案恢複成當前資料檔案。還能夠恢複資料檔案異常離線時沒有來得及做檢查點操作丟失的變更。介質恢複使用歸檔日誌和聯機日誌。跟執行個體恢複不同的是,介質恢複必須由命令顯式調用。

系列文章:Oracle恢複內部原理 http://www.bkjia.com/search.aspx?where=nkey&keyword=19824

6.1  什麼時候做介質恢複

由5.3節知道,資料檔案如果是還原的備份,在開啟前都要進行介質恢複,即使是應用聯機日誌就可以恢複的。另外一種情形就是資料檔案異常離線沒有做檢查點操作。不做介質恢複資料庫是無法開啟的,需要介質恢複的資料檔案也不能聯機。資料庫沒有被任何執行個體開啟的時候,介質恢複只能在離線的資料檔案上恢複。即使有崩潰恢複的時候也要在開啟資料庫顯示調用介質恢複命令。此時崩潰恢複可能沒有什麼做的但還是會自動運行。有時候介質恢複可能發現沒有日誌要應用,就會報錯“不需要介質恢複”,即該檔案不需要恢複。

如果當前控制檔案丟失了,將一個備份控制檔案還原了,介質恢複就必須做了,這是所有資料檔案都聯機的時候還要介質恢複的一個例子。

6.2  線程合并重做程式

介質恢複應用重做日誌時用的是線程合并的重做演算法。即它要同時應用所有線程的重做日誌,按SCN遞增的順序合并重做日誌。在還原的資料檔案上應用介質恢複的過程跟在聯機資料檔案上應用崩潰恢複的過程的不同在於:崩潰恢複同一時刻只會應用來自一個線程的日誌,因為同一時刻資料檔案上的塊只需要最多一個線程的重做日誌(同一時刻只有一個執行個體可能修改該塊)。在還原的備份上,則無法猜測跟該塊有關的線程數目。通常介質恢複時需要同時讀取所有線程的重做日誌,然後按照SCN遞增的順序合并重做日誌。注意這個演算法依賴於資料區塊的變更各個線程都是按SCN遞增的順序記錄的(並行伺服器環境中)。

6.3  還原備份

在資料庫關閉或者資料檔案離線的情況下,可以將該資料檔案的備份還原。注意絕不能在資料檔案還在使用的情況下還原。每次都資料檔案頭時都會校正資料檔案頭部的檢查點計數和資料檔案在控制檔案中的檢查點計數以檢測是否發生這種非法操作。

6.4  介質恢複命令

介質恢複命令有三種:

RECOVER DATABASE

RECOVER TABLESPACE

RECOVER DATAFILE

這三個命令的根本區別在於恢複的資料檔案集合不同。三個命令都用同樣的標準決定每個資料檔案是否要做介質恢複。每個資料檔案上都一個排它鎖,介質恢複程式開始恢複前會先申請獲得這個鎖。如果得不到就觸發一個錯誤。這可以防止兩個恢複會話同時恢複同一個資料檔案以及防止對一個在使用的資料檔案進行介質恢複。

6.4.1  RECOVER DATABASE

這個命令用來恢複所有聯機資料檔案。如果所有執行個體都正常關閉並且也沒有資料檔案被還原,這個命令會觸發一個“no recovery required”的錯誤。當有執行個體已經開啟了資料檔案時這個命令也會報錯因為該執行個體已經持有所有的鎖。

6.4.2  RECOVER TABLESPACE

這個命令用來恢複指定資料表空間上的所有資料檔案。為了將資料表空間名轉換成具體的資料檔案名,資料庫必須先開啟。這意味著這個資料表空間及其所有資料檔案在資料庫開啟前得先離線才能進行介質恢複。如果該資料表空間的所有資料檔案都不需要介質恢複時會觸發一個錯誤說沒有檔案需要介質恢複。

6.4.3  RECOVER DATAFILE

這個命令用來恢複指定的資料檔案,無論資料庫是否開啟,只要能獲得該資料檔案上的介質恢複鎖即可。當一個執行個體已經開啟資料庫的時候,則只能在離線的資料檔案上做介質恢複。

6.5  開始介質恢複

介質恢複時開始尋找介質恢複起始SCN。如所有要恢複的資料檔案的檔案頭中最低的檢查點SCN。注意:如果一個資料檔案的檢查點SCN落在它的離線SCN 範圍內(見2.18)則會引發一個異常。此時,該資料檔案的離線結束SCN將替代檔案頭檢查點SCN參與計算介質恢複起始SCN。

然後每個啟用的線程(指在介質恢複開始SCN那一刻處於啟用狀態的線程,見2.10)都會分配一個緩衝區用來讀取重做日誌。每個檔案的檔案頭的檢查點 SCN被儲存下來用來確保在這個SCN以前的重做日誌不需要應用。結束SCN(控制檔案中記錄的)也被儲存下來。如果是無窮大則取最大的結束SCN用來告訴介質恢複在何處停止,超出這個SCN的重做日誌不需要應用(見6.10)。介質恢複結束時,之前結束SCN為無窮大的資料檔案會在該結束SCN處做一個檢查點操作(而不是在介質恢複結束點)。這使得一個乾淨離線或者唯讀資料檔案在跟它的資料表空間乾淨結束SCN處進行檢查點操作。

  • 1
  • 2
  • 3
  • 4
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.