一、Backup and Recovery Overview
1、Backup and Recovery Overview
1.1 What is Backup and Recovery?
一般,備份和恢複引用各個策略和過程保護你的資料庫背離資料丟失,同時在任何一種資料丟失後重建資料庫。
1.1.1 Physical Backups and Logical Backups
一個備份是來自資料庫檔案的一個拷貝,它可以用做重建資料。備份可以被分為物理備份和邏輯備份。
物理備份是被用做還原和恢複資料庫的物理檔案的備份,比如資料檔案、控制檔案和歸檔記錄檔。最終,每個物理備份是儲存資料庫資訊到其他位置(不論是磁碟還是某些離線儲存比如磁帶)的檔案的一個拷貝。
邏輯備份包含使用一個oracle匯出工具匯出的邏輯資料(比如表或者預存程序),它們被儲存在一個二進位檔案,以便之後使用相應的oracle匯入工具再匯入資料庫。
物理備份是任何備份和恢複策略的基礎。邏輯備份在很多情況下是對物理備份的一個有用的補充,但是沒有物理備份只有邏輯備份是一個不充足的保護。
除非特殊指定,被用在備份和恢複文檔的說法:備份引用物理備份,同時備份部分或者全部資料庫是採取多種物理備份。在備份和恢複文檔集中關注點幾乎只是物理備份
1.1.2、從備份中恢複:錯誤和失敗
雖然有很多類型的問題停止一個資料庫的基本操作或者影響到資料庫I/O操作,但是只有兩種情況需要dba介入和介質恢複:介質失敗和使用者錯誤
其他失敗可能需要dba介入去重啟資料庫(一個執行個體失敗後)或者分配更多磁碟空間,但是這些情況一般不會引起資料丟失或者需要從備份恢複
瞭解使用者錯誤-
當應用邏輯錯誤或者自動化缺少步驟的錯誤,資料庫中的資料被錯誤地改變或者刪除,會引起使用者錯誤。資料丟失由於使用者錯誤包括:缺少步驟、drop重要的表或者刪除/改變
表的內容。儘管使用者一直練習和小心的許可權管理可以阻止最大的使用者錯誤,但是你的備份策略決定如何從容地恢複丟失的資料。
瞭解介質失敗-
一個介質失敗是需要運行資料庫的磁碟檔案的一個讀或寫的失敗,由於磁碟的物理問題,比如磁碟頭崩潰。任何一個資料庫檔案易受介質失敗傷害。
一個介質失敗後,適當的恢複技術依賴於被影響的檔案和可用備份的類型
1.1.3、Oracle Backup and Recovery Solutions: RMAN and User-Managed Backup
為了完成基於物理備份的備份和恢複,你有兩個可用的方案:
(1)recovery manager
它是一個工具,它和運行在oracle伺服器上的會話整合從而完成一系列的備份和恢複活動,也可以儲存備份曆史資料的一個資料庫
(2)the traditional user-managed backup and recovery
傳統的使用者管理的備份和恢複,你使用混合的作業系統命令和sql*plus的備份、恢複能力直接管理組成資料庫的檔案
以上兩種方法都可以被oracle公司支援,而且都有全面地文檔化。rman是Database Backup和恢複中更受人歡迎的解決方案。很多的備份和恢複文檔中關注基於rman的備份和恢複。
使用者管理的備份和恢複技術在後邊的單元Oracle Database Backup and Recovery Advanced User's Guide會被覆蓋到。
無論你使用rman還是使用者管理的方法,你都可以使用方式情節對象的邏輯備份來補充你的物理備份。在還原和恢複後,被儲存的資料隨後再被匯入從而重建這些資料。然而,邏輯
備份很大程度的超過了備份和恢複文檔的範圍
1.2、備份和恢複:基本的概念
通過user-managed技術或者通過rman,資料庫的物理結構和在資料庫恢複進程中的角色決定了備份和恢複的構成。
1.2.1、Physical Database Structures Used in Recovering Data
組成資料庫的檔案和其他結構儲存了資料,同時守護資料庫遠離可能的失敗。該論述說明組成資料庫的每一個物理結構和它們在一個來自備份的資料庫的重建中說扮演的角色。這部分包括
一下主題:
(1)資料檔案和資料區塊
(2)重做日誌
(3)復原段
(4)控制檔案
Datafiles and Data Blocks-
一個資料庫由一個或多個叫做資料表空間的邏輯儲存單元組成。在一個資料庫中的每個資料表空間由一個或多個叫做資料檔案的檔案組成,它們是在作業系統中的物理檔案,這些檔案包含了儲存在
資料表空間中的資料。最簡單的oracle資料庫也會有一個儲存在資料庫中的資料表空間。
資料庫使用叫做資料區塊的邏輯單元 管理在資料檔案中的儲存空間。資料區塊是資料庫可以使用和分配的最小儲存單元。
被改變或者新資料不會被立刻地寫入資料檔案。更新被緩衝到記憶體,過一段時間被寫入資料檔案。如果資料庫沒有經過一個正常的shutdown(但它開啟時,因為一個執行個體失敗異常退出或者
shutdown abort),那麼在記憶體中的資料通常不會被寫入到資料檔案。以前被還原的資料檔案,或者沒有被關閉的資料檔案,通常不能完全最新化。
一個資料庫的資料檔案的拷貝是任何備份的臨界部分。關於資料檔案和資料區塊的詳細內容參考Oracle Database Concepts。
Redo Logs-
重做日誌記錄一個資料庫的所有資料檔案的改變。任何時刻的資料在被改變時,在它們被寫入資料檔案之前,會被記錄到線上重做日誌中。
一個oracle資料庫至少需要兩個重做日誌組,同時,在每個日誌組至少有一個線上重做日誌成員。不時地,資料庫會迴圈轉動線上重做日誌組。
因為重做日誌包含了資料檔案所有變更的記錄,如果按時地從某個時間點的資料檔案的拷貝和從那個時間點向前的一個完整的重做日誌集是可用的,
那麼資料庫可以重做記錄在重做日誌中的改變。如果重做日誌已經被儲存,上述才會有可能。
所以,儲存重做日誌是很多備份策略中一個重要的部分。儲存重做日誌的第一層級是通過一個archive進程。資料庫可以把當前不再使用的重做日誌組拷貝
到一個或者多個位置。在一個重做記錄檔被歸檔後,它可以被備份到磁碟或者磁帶的其他位置,就是為了長久儲存和以後的恢複操作。
沒有歸檔日誌,你的Database Backup和復原選項會被嚴格地限制。你的資料庫在備份之前必須處於離線,同時你還原資料時,只能恢複到備份的那個時刻。
Control Files-
控制檔案包含了資料庫物理結構的記錄和這些物理結構的狀態資訊。儲存在控制檔案的幾種類型的資訊關係到備份和恢複:
(1)資料庫資訊(resetlogs scn和時間戳記)
(2)資料表空間和資料檔案的記錄(檔案名稱、資料檔案檢查點、讀/寫狀態、離線類別)
(3)重做線程(當前重做日誌)的資訊
(4)日誌記錄(記錄序號、每個日誌中的scn範圍)
(5)受損資料區塊的資訊
用於資料檔案的恢複進程會被在控制檔案的狀態資訊說引導,比如資料庫的檢查點、當前重做記錄檔和資料檔案的資料檔案頭檢查點。控制檔案的丟失使資料丟失的恢複更加困難。
Oracle Database Concepts提供了關於控制檔案更多的資訊。
Undo Segments-
一般地,當在資料檔案中的資料被更新,那些資料的前鏡像被寫入到復原段。如果一個事務被復原,這些復原資訊被用作還原到最初的資料檔案內容。
在恢複的背景下,一旦需要的重做日誌被應用的資料檔案,oracle資料庫就使用undo資訊去復原沒有提交的事務。在復原段被應用之前,資料庫已經被開啟。你不應該關心undo段,也不應該直接把它們作為備份和恢複進程的一部分來管理
1.3、The Database Recovery Process: Basic Concepts
從一個備份重建資料庫所有或者部分內容一般牽扯到兩個方面:從備份中找回資料檔案的拷貝和從歸檔和重做日誌的備份應用改變,從而把資料庫帶回到希望的scn(經常,當前)。
為了從備份中還原一個資料檔案或者控制檔案,找回在磁碟、磁帶或者其他介質上的檔案,同時讓它們在oracle伺服器上是可用的。為了恢複整個資料庫在於完成每個資料檔案的恢複。
scn100:一個資料庫的全備(資料檔案的拷貝和控制檔案)
scn100-scn500:重做日誌捕捉資料庫的操作,日誌忙時進行歸檔
scn500:介質失敗導致資料檔案丟失
如何恢複?還原全備的資料檔案到scn100,應用被捕捉到歸檔和重做日誌的事務,最後復原沒有提交的事務
1.4、Forms of Data Recovery
前面的概述畫出了還原和恢複進程的基礎的輪廓。在這個概述中的幾個變體對於備份和恢複是特別重要的:
這部分包含以下主題:
(1)資料檔案介質恢複:還原資料檔案,應用日誌
(2)完全的,不完全的和時間點的恢複
(3)在執行個體失敗後自動回復:崩潰恢複
1.4.1、Datafile Media Recovery: Restore Datafiles, Apply Redo
資料檔案介質恢複(經常被稱為介質恢複)是使用者發起的資料恢複中最基本的組成。它被用做從一個丟失的或者損壞的當前資料檔案,spfile或者控制檔案來恢複。
它也可以為一個沒有使用offline normal選項的離線資料表空間被記錄到重做日誌但沒有記錄到資料檔案的改變做恢複。無論你是用rman還是user-managed的備份和恢複
資料檔案介質恢複都可以被完成(對於user-managed的備份和恢複,介質恢複是主要的選擇)
從備份還原資料檔案的需要不被自動探索的。完成介質恢複的第一步是通過拷貝備份手動地還原資料檔案。一旦資料檔案被還原,資料庫自動探索該資料檔案是到期的,同時經曆介質恢複。以下情況強制要求你完成介質恢複:
(1)還原一個資料檔案的拷貝
(2)即使所有資料檔案是當前的,你仍然需要備份控制檔案
(3)一個資料檔案沒有使用offline normal選項被離線
對於介質恢複為了一個資料檔案可用,至少要做一件事情:
(1)資料庫的資料檔案必須沒有被開啟
(2)如果資料庫是開啟的,需要恢複的資料檔案必須離線
直到介質恢複完成,需要介質恢複的檔案才能操作為線上。你可以管理意料的介質恢複持續作為你備份和恢複策略的一部分。介質恢複的持久性被頻繁的備份和並行的恢複參數影響。
1.4.2、Complete, Incomplete and Point-In-Time Recovery
基於時間點的恢複對於使用者錯誤或者邏輯損壞引起的資料丟失時一種解決方案
如果你需要完成恢複時,發現丟失了備份之後到目標scn之間的歸檔日誌,基於時間點的恢複也是你的唯一選擇。
scn分別出現在v$log表的FIRST_CHANGE#列和V$DATAFILE的CHECKPOINT_CHANGE#列還有V$DATABASE的CHECKPOINT_CHANGE#上。 只要說明三個值相同,
那麼資料庫就沒有不同步的現象。否則就要進行介質恢複。
完全恢複恢複資料到最近的時間點,它沒有任何已提交事務的丟失。一般,"recovery"關係到完全恢複。偶爾,你需要把資料庫返回到一個過去時間點的狀態,比如,復原一個使用者錯誤,比如drop或delete一個表的內容,你想把資料庫返回到刪除發生之前的內容。不完全恢複,也被稱作基於時間點恢複,目標就是還原資料庫到先前的目標scn或目前時間。基於時間點恢複是對被使用者錯誤或者邏輯損壞引起的資料丟失的一個響應。
如果你需要完成恢複時,發現丟失了備份之後到目標scn之間的歸檔日誌,基於時間點的恢複也是你的唯一選擇。沒有丟失的日誌,你沒有記錄更新資料檔案到目標scn,你唯一的選擇是從備份的那個時間點恢複,最遠到沒有損壞的歸檔日誌,接著完成一個open resetlogs,丟棄丟失日誌之後的所有改變(如果找到丟失的歸檔日誌,同時你的資料庫還在開啟,你應該立刻做一個全備)。
如果因為資料丟失僅僅一個資料表空間受影響,你可以選擇在這個資料表空間上完成基於時間點的恢複來代替整個資料庫的恢複。資料表空間基於時間點恢複是一個更進階的技術,它被文檔化在Oracle Database Backup and Recovery Advanced User's Guide
1.4.3、Automatic Recovery After Instance Failure: Crash Recovery-崩潰恢複
crash recovery process是恢複的一個特殊組成,它發生在崩潰後(shutdown abort)執行個體啟動的第一時間。崩潰恢複的目標就是把資料檔案帶回到事務一致性的狀態,儲存所有已提交的事務到執行個體失敗的瞬間。資料檔案介質恢複更崩潰恢複一樣,就是為了還原資料庫完整性。但是,在它們之間有很多重要的不同點:
(1)介質恢複必須明確地被使用者發起。資料庫不會自己運行介質恢複
(2)介質恢複是針對從備份還原的資料檔案應用改變,而不是線上的資料檔案
(3)介質恢複需要使用歸檔日誌和線上日誌
崩潰恢複不像手動完成恢複的組成,它僅僅使用線上重做日誌和當前線上的資料檔案,在崩潰恢複期間歸檔日誌從未被使用,同時資料檔案從未被還原。資料庫應用在線上重做日誌中任何待定的更新到資料檔案。結果是:在崩潰後無論何時重啟資料庫,資料檔案反映了執行個體崩潰瞬間那刻(資料庫開啟後,未提交事務的任何改變被復原)。
崩潰恢複是一個過程,它包括:多個需要恢複的執行個體,從最後一個檢查點起redo進程產生的重做日誌,同時使用者可配置的因素:比如重做記錄檔的數量和大小,檢查點頻繁度和並行的恢複設定。你可以在資料庫伺服器中配置參數,那麼可以調節崩潰恢複的期間。你也可以調節檢查點來最佳化恢復。
在rac中的崩潰恢複發生在:在叢集中的所有執行個體失敗時。為了更多rac關於崩潰和執行個體恢複,閱讀Oracle Real Application Clusters Quick Start
1.5、Backup and Recovery with RMAN
使用rman可以訪問但是使用者管理的備份和恢複不能使用的幾個資料備份和恢複技術和特性。最重要的是:
(1)增量備份
它提供緊湊的備份(儲存僅僅更改的塊)和更快的資料檔案介質恢複(減少應用重做的需要)
(2)塊介質恢複
不需要離線和還原資料檔案,僅僅修複少量損壞的資料庫
(3)不用備份不用的塊
在某些情況下,備份期間rman可以跳過沒有使用的資料區塊
(4)二進位壓縮
使用被整合到oracle資料庫中的壓縮機制來減少備份的大小
(5)加密的備份
使用被整合到oracle資料庫中的加密功能來以加密格式儲存備份
rman減少管理員與備份策略的關聯的工作。rman儲存一個關於備份,歸檔日誌和它自己活動的廣泛的記錄,被稱作rman資料庫。在還原作業中,rman可以使用這些資訊來消除多數情境下還原
時為你識別備份檔案。你也可以使用資料庫中的資訊產生備份活動的報告。
rman資訊的主要儲存在生產資料庫的控制檔案中。你可以建立一個獨立的recovery catalog,它是一個在separaterecovery catalog database為一個或多個資料庫儲存了rman鏡像資訊的模式對象。
這個文檔其他剩餘,Oracle Database Backup and Recovery Basics,關注於使用rman實現你的備份和恢複策略。
1.5.1、Files That RMAN Can Back Up
rman可以備份所有被用做高效恢複的資料庫檔案。rman支援備份備份以下檔案類型:
(1)資料檔案,資料檔案的鏡像拷貝
(2)控制檔案,控制檔案的鏡像拷貝
(3)歸檔記錄檔
(4)當前伺服器參數檔案
(5)備份片,包含了rman產生的其他備份
1.5.2、RMAN Backup Destinations: Disk and Media Managers
rman可以建立和管理在磁碟和磁帶上的備份,備份在磁碟和磁帶上最初建立的備份,從備份還原資料庫檔案。被用作磁帶備份的裝置經常引用SBT裝置。rman通過media management layer和SBT裝置互動
1.5.2.1、Types of Oracle Database Backup under RMAN
在物理備份中,根據Database Backup時資料庫的狀態、資料庫哪個部分實際被備份、備份如何被儲存,有幾種區分:
(1)About Consistent and Inconsistent Backups
物理備份也可以被劃分為一致和不一致備份。一致備份在資料庫處於一致狀態時被產生,這個狀態是在重做日誌中的所有變更被應用到資料檔案。從一致備份還原的資料庫可以被離開開啟,不需要經曆介質恢複。但是,一致性備份只能產生在資料庫一致性關閉後,不能是在a crash或者shutdown abort後
為了可用性的原因,oracle資料庫被設計為操作非一致性備份,但資料庫處於open狀態時,進行備份。然而,從一個非一致性備份還原,必須要經曆介質恢複,那麼資料庫可以在資料庫開啟之前從線上和歸檔日誌應用改變。因為介質恢複需要歸檔日誌,使用非一致性備份需要你的資料庫運行在歸檔模式
1.5.2.2、About Full and Incremental Backups
全備是包含所有資料檔案的備份。rman或者使用作業系統層級的檔案拷貝命令建立全備。增量備份是基於僅僅拷貝資料檔案中改變的資料區塊。恢複時,從增量備份中提取所有改變的塊可以代替重做日誌的應用,從而相當地縮短恢復。增量備份只能使用rman產生。
1.5.2.3、About Image Copies, Backup Sets and Backup Pieces
通過rman建立的Database Backup可以是鏡像拷貝,也可以是備份組。一個鏡像拷貝是資料庫檔案相同的拷貝。rman可以建立鏡像拷貝備份,然而在進程中,rman會檢查損壞的內容,但是本地作業系統
檔案拷貝工具不能做。鏡像拷貝也可以使用作業系統命令比如cp建立
注意:如果你沒有使用rman建立鏡像拷貝,你在rman使用它們之前必須使用catalog命令來把鏡像資訊記錄到rman資料庫
rman也可以以rman指定格式叫做備份組儲存它的備份。一個備份組是備份片的集合,每個備份片包含了一個或多個資料庫檔案的備份。在rman中完成的備份任務可以建立一個或多個備份組,備份組的資訊被記錄在rman資料庫。備份組只能通過rman建立和訪問。
1.6、Automatic Disk-Based Backup and Recovery: The Flash Recovery Area
建立不同備份和恢複檔案的組件對每個檔案系統的大小沒有任何瞭解。使用Automatic Disk-Based Backup and Recovery,你可以建立一個閃回恢複區,使備份檔案的管理自動化。在磁碟上選擇一個位置,為儲存空間提供一個更大的邊界,同時設定一個備份策略,那麼資料庫在那塊空間管理用做備份的儲存、歸檔日誌和其他與恢複相關的檔案。oracle建議你開啟一個閃回恢複區來簡化你的備份管理。
1.7、Oracle Flashback Technology: Alternatives to Point-in-Time Recovery
oracle閃回技術提供了一系列特性,它們提供了實用的可以選擇的事物,比如查看資料的過去狀態、復原資料(不需要你從備份還原大部分資料庫或者完成基於時間點的恢複)。oracle的閃回特性在很多狀況中比介質恢複更高效,同時更低損壞。
oracle的很多閃回特性在邏輯層次上操作,來查看和操縱資料庫物件,就像如下的: