Oracle RAC備份與恢復

舊夢依稀發表於2013-08-20
1、Oracle物理備份主要針對以下檔案:
資料檔案、控制檔案、歸檔日誌、引數檔案(pfile和 spfile)
RMAN可以備份除了pfile以外的其他檔案。
無論資料庫處於ARCHIVELOG模式還是NOARCHIVELOG模式,online redo都不需要備份。
2、RMAN能夠自動理解Oracle RAC資料庫。
對於比較大的資料庫來說,如果備份與恢復時間要求非常嚴格,可以考慮使用磁碟映象技術,對於非常大的資料庫在前述基礎上應該做容災。
3、Oracle RAC環境中每個節點產生的歸檔日誌應能被其他任何節點訪問到。可以使用具有NFS方案的本地存檔機制,Oracle推薦使用閃回恢復區,閃回恢復區儲存在ASM上,並與資料檔案存放在不同的磁碟組中。
4、Oracle RAC和DataGuard可以整合在一起,一般主庫設定為RAC,備庫設定為單例項或RAC。
5、Oracle RAC環境中“例項恢復”和“崩潰恢復”概念上的細微差別
在RAC中“崩潰恢復”指的是叢集中的所有例項都發生故障,因此所有例項都必須恢復,或者所有例項可能需要恢復,具體取決於它們正在執行的操作。“崩潰恢復”中,要點在於所有例項都需要參與恢復操作,也應該是恢復操作的合格候選者。
“例項恢復”指叢集中的一個或多個例項發生故障。需要由其它正常的例項執行例項恢復。
“執行緒恢復”在兩種情況下都是適用的,因為它是在恢復一個例項,但這個術語通常是描述叢集環境中單一執行緒(例項)的恢復。
6、由一個例項生成的重做資訊成為“重做執行緒”。這個例項產生的所有日誌檔案都屬於這一執行緒。
7、檢查點
(1)執行緒檢查點(本地檢查點)
一個例項中包含對任意聯機資料檔案的修改,執行緒檢查點收集這個例項中指定的SCN(執行緒檢查點SCN)之前的所有髒緩衝區,並將它們寫到磁碟中。這個SCN與日誌中的特定RBA相關聯,用於判斷在什麼時候完成了所有緩衝區的寫入過程。執行緒檢查點可以在日誌切換時產生,或者在滿足了任意執行緒檢查點條件時產生。
在所有聯機資料檔案的執行緒中,這個執行緒檢查點SCN之前的全部髒資料塊都寫入到磁碟中。在RAC環境中,執行緒檢查點是獨立產生的,對每個例項來說都是相互隔離的。這一資訊記錄在一個名為“執行緒檢查點結構”的結構中,以及記錄在多個控制檔案記錄和所有聯機資料檔案頭中。
(2)資料庫檢查點(全域性檢查點)
當需要觸發一個資料庫檢查點時,Oracle查詢一個執行緒檢查點,這個檢查點擁有所有已開啟、已啟用程式的最低檢查點SCN(所有已關閉執行緒的最高檢查點SCN),並且其本身變為資料庫檢查點。對於記憶體中的任何資料塊,只要包含了在此SCN之前對任意例項所做的修改,都應將其寫到磁碟中。對於單例項資料庫而言,資料庫檢查點與執行緒檢查點相同。這個資訊記錄在幾個控制檔案和所有聯機資料檔案頭中。
(3)增量檢查點
增量檢查點由“檢查點佇列(CKPTQ)”支援。
RBA = redo bytes address
CKPTQ按照對資料塊進行修改的第一條日誌記錄的RBA排序,按照對資料塊的最早修改時間排序後將髒資料塊放到CKPTQ中,每隔3秒鐘由DBWR程式將CKPTQ中的髒塊寫入磁碟。
8、Oracle RAC中的崩潰恢復
在Oracle RAC中,倖存例項中的SMON程式可以獲取一份可靠的死亡例項名單,還有一份“無效的”塊鎖清單。這些鎖是無效的,因為鎖定這些資料塊的例項已經崩潰,這些鎖的狀態保持“模糊”或者未知。後臺程式SMON還執行恢復操作,執行恢復的例項隨後將清除這些鎖,在完成恢復和清理之後,使它們能夠儘快恢復正常使用。
9、寫塊記錄(BWR--block write recoder)
Oracle 9i及更高版本中使用的最優恢復機制之一是將有關檢查點的更多資訊寫到重做日誌中。通常,快取老化及增量檢查點系統會將許多塊寫到磁碟中。當髒緩衝區寫入器(DBWR/DBWn)完成一個資料塊寫入時,它還將在重做日誌檔案中新增一條重做記錄,表明已經寫入了該資料塊,一般包括資料塊地址以及SCN資訊。DBWR還可以批量寫入髒資料塊,不過這一過程是採用一種“惰性”方式完成的。
在Oracle RAC中,當一個例項寫入一個由全域性資源覆蓋的塊時,或者當被告知不再需要儲存“過去映象(PI)”緩衝區時,將會寫入BWR。
10、過去映象(PI)
PI就是全域性髒塊的一個副本,在資料庫緩衝區中維護。PI由一個例項維護,直到它或者這個塊的更新版本被寫到磁碟上為止。在另一個例項將同一個塊的更新版本寫到磁碟上之後,由“全域性快取服務(GCS)”負責通知例項:不再需要它的PI。在GCS通知所有儲存PI的例項特定塊的一個新的、一致的版本已經儲存到磁碟上之後,PI將被拋棄。
11、檢查點和PI
在快取融合中,當一個例項需要寫入一個塊以滿足檢查點要求時,這個例項需要檢查覆蓋該塊的資源角色。如果這個角色為全域性,那麼這個例項必須通知GCS:它需要將這個塊寫入到磁碟上。GCS負責找出最近的塊映象,並通知儲存這一映象的例項執行塊寫入。GCS隨後通知這個全域性資源的所有擁有者:它們可以釋放這個塊的PI副本,然後允許釋放這些全域性資源。
12、兩步恢復
Oracle RAC引入了兩步恢復的概念,在這種恢復中,恢復程式(SMON或前臺程式)執行由兩個步驟組成的“讀取”過程。它主要是從日誌(BWR)中讀取更多資訊,限制恢復所需的I/O數量。第一次讀取構建一個列表,其中列出重做日誌中提到的塊(所有擁有重做資訊的資料塊)。這些重做記錄中可能有一些是BWR條目,這意味著所提到塊在重做時刻是最新的。因此,恢復程式不需要“恢復”這個塊,並且會將它從正在構建的列表中刪除。經過這第一個步驟之後得到的列表中是那些擁有重做資訊但還沒有寫入磁碟的塊,這個列表稱為“恢復集”。
第二次讀取過程現在僅處理這個列表或集合中的塊,它要少於第一步中重做流內涉及的塊。在這一階段應用重做,並且在第二步中讀取、寫入的資料塊更少。如果系統不能執行兩步恢復,那麼它會回退到單步恢復。警報日誌將會列出兩步恢復的結果。
兩步崩潰恢復可以通過以下設定來禁用:
_two_pass=false
13、快取融合恢復
快取任何恢復僅存在於RAC。因為在已有的恢復步驟之外,還需要附加步驟——GRD(再)配置、節點間通訊等,所以它成為“快取融合”恢復。
崩潰恢復是例項恢復的一種特殊狀態,在這種情況下,所有例項都發生了故障,但在任何一種情況下都需要合併來自故障例項的執行緒。唯一的區別在於:在例項恢復中是由SMON執行恢復的,在崩潰恢復中是由前臺程式執行恢復的。
14、動態再配置和關聯性主控切換
“主控切換”用來描述一種操作,嘗試執行恢復的節點會通過此操作試圖擁有或主控在故障之前由另一例項主控的資源。因此,“主控切換”表示在例項恢復期間或者當一個節點加入或離開叢集時執行的操作。
15、表決磁碟(voting disk)和OCR的備份與恢復
Oracle叢集件備份應當包括表決磁碟和OCR元件。
建議使用Oracle提供的映象技術來映象表決磁碟和OCR。
表決磁碟和OCR的映象可以在安裝期間進行配置,也可以在之後的階段進行動態配置。
(1)表決磁碟的備份和恢復
表決磁碟可以使用標準的作業系統命令備份:UNIX系統上dd,Windows系統上ocopy命令。
表決磁碟的新增使用CRSCTL命令完成。
在Oracle 11gR1之前一直可以採用手動方式備份和恢復表決磁碟,從Oracle 11gR2開始就不能再採用手動方式。
備份
UNIX
dd if=voting_disk_name f=backup_file_name
Windows
ocopy voting_disk_name backup_file_name
恢復
UNIX
dd if=backup_file_name f=voting_disk_name
Windows
ocopy backup_file_name voting_disk_name
注意:從Oracle 11gR2開始,不再需要備份表決磁碟。表決磁碟資料自動包含在OCR備份中。在成功恢復OCR之後,只需執行crsctl add css votedisk命令就能在所需位置建立新的表決磁碟。在Oracle 11gR2中不再支援使用dd及其它複製命令進行表決磁碟手動備份。
(2)OCR的備份和恢復(恢復OCR時要極為仔細,分清backup/restore和export/import)
Oracle叢集件每4小時自動建立OCR備份。
在任意時間,Oracle總是在主控節點儲存OCR的最後3個備份副本。另外,建立備份的CRS守護程式(CRSd)還會建立和保留每一天的OCR備份,並在每週結束時建立一個OCR備份。在任意時刻,總是有5個叢集件自動成功建立的OCR備份。
在UNIX/Windows系統中,用於生成備份的預設位置為GRID_HOME/cdata/中。在預設情況下,第二個節點被選為主控節點,OCR備份和儲存在主控節點上。
除了自動備份之外,還可以手動備份OCR:
ocrconfig -manualbackup
以上命令直接進行OCR備份,但不備份OLR。
檢視當前OCR備份
ocrconfig -showbackup
ocrconfig -showbackup -manual
ocrconfig -showbackup -auto
在恢復OCR之前,應該考慮重啟資源或者先刪除資源,再將其新增到OCR中。在嘗試恢復OCR之前,可以使用ocrcheck命令檢視OCR的狀態。
要恢復OCR應該從所有節點停止Oracle叢集件。crsctl stop crs如果返回錯誤,就是有-f選項強制停止CRS。
一旦停止了所有節點上的CRS守護程式,就可以使用以下命令恢復OCR:
ocrconfig -restore
然後重啟所有節點上的Oracle叢集件:
crsctl start crs
還可以匯入和匯出OCR。這可以作為OCR恢復的替代機制。可以使用以下命令匯出OCR的內容:
ocrconfig -export
以上命令會建立OCR的一個二進位制副本。使用ocrdump命令可以獲得一個人類可識別的文字檔案。
匯入OCR,也要停止所有節點上的叢集件。crsctl stop crs,然後執行匯入:
ocrconfig -import
根據需要,可以使用叢集驗證實用工具,以驗證作為叢集組成部分配置的所有叢集節點是否完整:
cluvfy comp ocr -n all -verbose
驗證OCR備份
同樣可以使用ocrdump驗證OCR備份的內容和結構有效性。
ocrdump -backupfile
注意:叢集件的自動OCR備份僅備份主控節點上的OCR,因此推薦從其它節點手動備份OCR,否則,如果主控節點停機,並且不能啟動,那麼OCR備份會丟失。因此,將OCR備份過程與定期備份計劃結合使用是非常重要的。
 

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

相關文章