Oracle RMAN 备份与恢复
RMAN 備份與恢復
- 一、RMAN備份
- 1.連接數據庫
- 2.通道分配
- 3.RMAN 備份類型
- 4.BACKUP 命令
- 5.FORMAT 參數替換變量
- 二、RMAN 恢復
- 1.數據庫進行完全介質恢復
- 2.表空間的恢復
- 3.恢復數據文件
- 4.恢復控制文件
- 5.利用 RMAN 進行不完全恢復
- 6.RMAN 恢復示例
- 7.說明
??????? RMAN (Recovery Manager)是 Oracle 恢復管理器的簡稱,是集數據庫備份(Backup)、還原(Restore)和恢復(Recover)于一體的Oracle數據庫備份與恢復工具。它能夠備份整個數據庫或數據庫部件,如表空間、數據文件、控制文件、歸檔文件以及 Spfile 參數文件,RMAN備份是一種物理的備份,它直接去讀取數據塊,因此 rman 是塊級別的備份。從備份的那個時間點開始RMAN 將鎖定此刻的數據文件信息,也就是說只備份數據文件到此刻的信息為止。
一、RMAN備份
1.連接數據庫
通過 RMAN TARGET 連接
???????使用 RMAN 連接本地數據庫之前必須首先設置操作系統環境變量:ORACLE_SID,并指定該值等于目標數據庫的實例名。如果本地庫只有一個實例并已經設置了 ORACLE_SID 環境變量,則不需要再指定ORACLE_SID,RMAN 會自動連接到默認實例。
???????如果要連接的目標數據庫是一個遠程數據庫,那么必須在建立連接時指定一個有效的網絡服務名( Net Service Name),并且本地的tnsname.ora 文件中必須已經建立了該網絡服務名的正確配置
???????通過 CONNECTTARGET 連接。
???????也可以先啟動 RMAN,然后再通過CONNECT 命令來連接目標數據庫:
2.通道分配
???????通道是指由服務器進程發起并控制目標數據庫的文件與物理設備之間的字節流。一個通道即為一個會話,一個會話對應于一個服務器進程。所有的備份和恢復操作都是由 RMAN 連接的服務器進程完成的,更確切的說是由通道完成的。通道的分配主要有兩種形式:自動分配通道和手動分配通道。可以根據預定義的配置參數自動分配通道,也可以在需要時手動分配通道。
自動分配通道。
自動分配通道是指在執行 RMAN 命令時,不需要顯式制定通道的細節就可以使用通道(實際上也是使用預先設置或是使用默認的設置),如果沒有手動分配通道,那么 RMAN 在執行 BACKUP 等操作 I/O的命令時將會使用預定義配置中的設置來自動分配通道。
查看默認的通道設備類型設置:
查看可用的設備類型:
修改設備備份并行度為 2,即備份開始時會使用兩個通道進行備份,又還原默認設置值:
査看通道配置并修改通道配置,設置最大備份片的大小為 1G,通道 1 的備份路徑為 C: \oracle\bak:
還原通道配置:
手動分配通道:
分配通道有一個專用命令: ALLOCATE CHANNEL,該命令可以(并且只能)在 RUN 塊中出現,在執行 BACKUP、RESTORE 等需要進行磁盤 LO操作的命令時,可以將它們與ALLOCATE CHANNEL 命令放在一個手動分
配通道。
使用 RUN 命令手動分配通道。語法為:
RMAN 中執行的每一條 BACKUPRECOVER 等命令都至少要求使用一個通道,通道決定了這些操作執行的并行度,每條ALLOCATECHANNEL 命令對應一個通道,如果需要多個通道,執行多條語句即可。
手動分配通道后應該在 RUN 結束前釋放,可以用 RELEASE CHANNEL 命令,不過不手動釋放也沒關系,RMAN 會在 RUN 塊中任務執行完后自動釋放該塊中所用的通道。
3.RMAN 備份類型
備份集:
???????備份集( Backup Set)是 Orac1e 默認的備份類型,把數據文件中已經使用過的數據塊備份到一個或多個文件中,這樣的文件叫做“備份片”,所有備份出來的文件組合成為“備份集”。備份集與備份片的關系類似于表空間與數據文件的關系,備份集是一個邏輯概念,將備份片(物理文件)邏輯地組織在一起。一般來說一個通道會產生一個備份集,比如啟動了 3 個通道,那么每個通道負責生成一個備份集,不過如果啟動了控制文件自動備份,那么控制文件所在的備份文件會單獨生成一個備份集,不會與數據文件備份集合并在一起。如果在備份時指定了每個備份集中包含的數據文件個數(通過filesperset設置),那么即便只有一個通道,也有可能生成多個備份集。
???????備份片( Backup Piece):每個備份片是一個單獨的輸出文件。一個備份片的大小是有限制的,如果沒有大小的限制,備份集就只由一個備份片構成。備份片的大小不能大于你的文件系統所支持的文件的最大值,最大值可以通過 maxpiecesize 設置。
???????其中在進行控制文件備份以后,會出現一個獨立備份集。控制文件和數據文件不能放在同一個備份集里,因為數據文件所在的備份集以 Orac1e 數據塊為最小單位,而控制文件所在備份集是以操作系統塊作為最小單位。同樣的,歸檔日志文件所在的備份集也是以操作系統塊為最小單位,所以歸檔日志文件備份集和數據文件備份集不能在同一個備份集里面。
鏡像副本:
???????鏡像副本( Image Copy)與手工系統拷貝備份數據文件類似,是一個數據文件生成一個鏡像副本文件(數據庫數據文件、歸檔重做日志或者控制文件的精確副本),不同的是這個過程由 RMAN 完成,RMAN 復制的時候也是一個數據塊一個數據塊( Orac1e Block)地復制,同時默認檢測數據塊是否出現物理損壞(默認不會進行邏輯損壞檢查,需要手工啟動),且不要將表空間置為 begin backup 狀態,與備份集類型
不同在于生成的鏡像副本中包含使用過的數據塊,也包含從來沒有用過的數據塊。生成鏡像副本的好處在于恢復速度相對備份集來說更快,恢復時可以不用拷貝,指定新位置即可。
備份集和鏡像副本的區別:
???????鏡像副本是與數據文件( Data file)、控制文件( Control File)或歸檔重做日志文件(ArchivedLog)完全一致的副本。用戶可以使用操作系統工具或 RMAN 創建鏡像副本,也能夠使用操作系統工具或RMAN 直接利用鏡像副本恢復數據庫,而無須任何額外處理。備份集是由被稱為備份片的一個或多個物理文件構成的,其格式為 RMAN 自有格式。備份機與鏡像副本的區別在于,備份集內可以包含多個數據文件,且備份過程中可以進行特殊處理,例如壓縮或增量備份( Incremental Backup)等。備份集必須使用 RMAN 來恢復。
4.BACKUP 命令
???????RMAN 中所有的備份操作都是通過 BACKUP 命令(指創建備份集方式的備份)進行的,對于比較簡單的備份需求,甚至只需要執行一條命令,下面分別演示通過 BACKUP 命令進行不同級別的備份。
基本語法:
整庫的備份:
其中, FORMAT 參數用來自定義備份文件的路徑。該備份生成了兩個備份文件(如果多個通道,可能是多個文件):一個是存儲數據文件,另一個是存儲控制文件和參數文件。
通過 LST 命令來查看創建的全庫備份:
備份表空間:
只要實例啟動并處于加載狀態,無論數據庫是否打開,都可以在RMAN 中對表空間進行備份。使用 BACKUP TABLESPACE 命令備份一個或多個表空間。
通過 LIST 命令查看創建的表空間備份:
備份數據文件:
有兩種方式實現數據文件的備份:一種是通過數據文件名稱來備份;另一種是通過數據文件編號指定來備份的數據文件。
可以通過查詢數據字典 DBA_DATA_FILES 來得到數據文件名和數據文件編號。
通過 BACKUP DATAFILE 命令備份 USERS 表空間的數據文件:
通過文件名稱
通過文件編號
查看指定數據文件的備份(datafile后面為數據文件的編號,如果要查看多個,則各個編號之間用逗號隔開):
備份控制文件:
手動執行備份命令:
改為自動備份:
在 Orac1e11g 中,如果使用了閃回區,那么控制文件的自動備份會存儲在閃回區中,有時候為了安全,需要將控制文件的自動備份轉移到其他目錄下:
上述路徑一定要存在否則匯報下面錯誤:
當備份服務器把 AUTOBACKUP 被置為ON時,RMAN做任何備份操作,都會自動對控制文件做備份。
查看備份的控制文件:
備份歸檔重做日志文件:
通過如下命令來查看歸檔日志信息:
使用 BACKUP ARCHIVELOG 命令備份歸檔重做日志文件:
執行 BACKUP 命令時可以指定 PLUS ARCHIVELOG 子句來實現備份歸檔重做日志文件:
以上語句是在備份數據文件之前首先對所有歸檔文件進行備份。
完成備份之后,可以通過下列命令查看已備份的歸檔日志片段:
備份服務器初始化參數文件:
在進行備份控制文件時,RMAN 會自動備份服務器的參數文件,并置于控制文件相同的備份片段中,因此很少需要單獨對 SPFILE 進行備份,如果想單獨備份,直接使用 BACKUPSPFILE 命令即可。
5.FORMAT 參數替換變量
- %c:備份片的拷貝數(從 1 開始編號)
- %d:數據庫名稱
- %D:位于該月中的天數(DD)
- %M:位于該年中的月份(MM)
- %F:一個基于 DBID 唯一的名稱,這個格式的形式為c-IIIIIIIIII-YYYYMMDD-QQ,其中 IIIIIIIIII 為該數據庫的 DBID,YYYYMMDD 為日期,QQ 是一個 1-256 的序列
- %n:數據庫名稱,并且會在右側用 x 字符進行填充,使其保持長度為 8
- %u:是一個由備份集編號和建立時間壓縮后組成的 8 字符名稱。利用%u 可以為每個備份集生成一個唯一的名稱
- %p:表示備份集中備份片段的編號,從 1 開始編號
- %U:是%u_%p_%c 的簡寫形式,利用它可以為每一個備份片段(即磁盤文件)生成一個唯一名稱,這是最常用的命名方式
- %s:備份集的號
- %t:備份集時間戳
- %T:年月日格式( YYYYMMDD)
在 backup 命令中沒有指定 format 選項,則 RMAN 默認使用%U 為備份片段命名
二、RMAN 恢復
???????RMAN 中的恢復對應兩個操作:數據庫修復( Restore)和數據庫恢復( Recover)。使用 RMAN 進行數據庫恢復時只能使用之前使用 RMAN進行的備份,可以實現數據庫的完全恢復,也可以實現數據庫的不完全恢復。與用戶管理的恢復類似,RMAN 恢復也分兩個步驟,首先使用restore 命令進行數據庫的修復,然后使用 recover 命令進行數據庫的恢復。數據庫修復是指利用備份集的數據文件來替換已經損壞的數據庫文件或者將其恢復到一個新的位置。數據庫恢復是指應用所有重做日志,將數據庫恢復到崩潰前的狀態,或者應用部分REDO,將數據庫恢復到指定的時間點。
???????RMAN 中提供了多種不同級別的恢復方式,可以恢復整個數據庫,也可以只恢復某個或某幾個表空間,或某個或某幾個數據文件,可以單獨恢復控制文件、初始化參數文件,或者歸檔文件。也就是說,用RMAN 備份的就都能被恢復。
1.數據庫進行完全介質恢復
???????如果數據庫只剩下控制文件和參數文件,數據文件因為丟失或損壞,之前創建過整庫的備價,并且執行備份操作之后,所有的歸檔日志文件和重做日志文件都還在,這種情況下就可以將數據庫恢復到崩潰前那一刻的狀態,這種恢復方式,叫做完全介質恢復。
執行完全介質恢復有以下三個步驟:
第一步:啟動數據庫到加載狀態:
第二步:執行恢復操作:
執行 recover 命令時,附加的 DELETE ARCHIVELOG 和 SKIP TABLESPACE 兩個參數是可選參數:
- DELETE ARCHIVELOG:表示 RMAN 將在完成恢復后自動刪除那些在恢復過程中產生的歸檔日志文件
- SKIP TABLESPACE:跳過指定表空間,比如臨時表,當然臨時表空間即使你不跳過它也不會恢復的
第三步:恢復完成后,打開數據庫:
2.表空間的恢復
執行表空間的恢復時,數據庫可以是 mount 狀態,也可以是 open狀態。在執行恢復之前如果被操作的表空間未處于 offline 狀態,必須首先通過 alter tablespace … offline 語句將其置為脫機
如果一次對多個表空間進行恢復,那么只需要在執行restore/recover 命令時同時指定多個表空間名稱即可,相互間以逗號分隔。不過將表空間置為 online/offline,腳本不能合并為一條。
3.恢復數據文件
執行數據文件的恢復時,數據庫可以是 mount 狀態,也可以是open 狀態。在執行恢復之前,如果被操作的表空間未處于 offline狀態,必須首先通過 alter database datafile…offline 語句將其置為脫機。
執行 restore/recover 操作指定數據文件時,既可以以數據文件編號,也可以由具體的數據文件名代替。
如果由于磁盤損壞導致數據文件無法訪問,那么恢復時數據文件可能無法再恢復到原路徑,必須在執行 restore 命令之前,給數據文件指定新的路徑。
4.恢復控制文件
Orac1e 會默認在 $Orac1e home/dbs 或者 $Orac1e home /database 目錄中創建服務器參數文件與控制文件。
假設已經還原了實例參數文件和啟動了實例,還原控制文件時,一般過程是先設置 oracle_sid 和登錄 RMAN,然后設置 DBID,使 RMAN知道需要查找哪一個數據庫的控制文件。
如果使用默認的位置來存儲控制文件的自動備份,就可以簡單地執行: restore controlfile from autobackup,這樣 RMAN 就可以查找包含最新控制文件的控制文件備份集。一旦恢復了控制文件,就必須關閉重啟數據庫實例。如果使用的是非默認位置,就需要分配一個指向該位置的通道,然后再使用相同的方法來還原控制文件。
從自動備份中恢復的具體步驟如下:
第一步:建立測試環境:
由于控制文件在 Orac1e 數據庫運行期間會被 Orac1e 進程鎖定,無法直接刪除,因此這里還是按照之前實驗模擬丟失數據文件的方式,首先 shutdown 數據庫,然后再刪除控制文件:
第二步:恢復控制文件:
新建一個窗口,連接到 RMAN 命令行
目標數據庫控制文件丟失,無法啟動到 mount 狀態,此處必須首先指定 DBID。
要獲得目標數據庫的 DBID,可以通過多種方式查詢,如我們創建自動備份時,如果沒有更改其命名方式,文件名中會包含 DBID;或者查看之前生成的 RMAN 備份日志,當使用 RMAN 登錄目錄數據庫后,最先輸出的信息中就會顯示出目標數據庫的 DBID;或者連接到目標端數據庫之后,查詢 database 視圖也可以獲得。
恢復至默認路徑下:
這里出現找不到副本的問題,發現前面設置的autobackup使用的不是默認路徑
所以要從前面設置的路徑進行恢復
第三步:啟動數據庫:
5.利用 RMAN 進行不完全恢復
啟動 RMAN 并連接目標數據庫,如果使用恢復目錄,還需要連接到恢復目錄數據庫。
將數據庫設置為加載狀態:
基于時間的不完全恢復:
基于時間恢復是指當出現用戶錯誤(例如誤刪除表、誤截斷表) 時,恢復到指定時間點的恢復。執行RMAN,啟動數據庫到 mount 狀態。使用 set until time 命令指定要恢復到的時間點。
基于 SCN 的不完全恢復:
執行 RMAN,啟動數據庫到 mount 狀態。使用 set until scn 命令指定要恢復到的 SCN 點。
查詢當前的scn
基于日志序列號的不完全恢復:
基于日志序列號恢復是指恢復數據庫到指定日志序列號的狀態。
可以通過下面的語句來查詢當前的日志序列號。
6.RMAN 恢復示例
我們來模擬一個過程,首先創建一份數據庫的完全備份,然后在數據庫中進行若干操作,之后刪除該數據文件來模擬該文件意外丟失,最后通過 RMAN 來恢復該數據文件。
聯機備份的步驟如下:
第一步:建立測試表,并向表里添加一條記錄
第二步:在備份之前做一次日志切換
第三步:將數據庫進行整庫的備份
第四步:再向測試表中添加一條記錄,再做一次日志切換
第五步:關閉數據庫,模擬丟失數據文件
第六步:啟動數據庫
第七步:查詢有問題的數據文件
RMAM 恢復的步驟如下:
第一步::重新進入 RMAN 界面,將出現問題的表空間設置為脫機狀態
第二步:修復數據庫
第三步:恢復數據庫,完成介質恢復
第四步:介質恢復完成后,將表空間恢復為聯機狀態
第五步:恢復完成后,打開數據庫
第六步:檢查數據記錄丟失情況
這里可以發現,數據庫恢復成功,數據沒有丟失。若丟失的數據文件有多個,則應先將相應的數據文件全部進行備份,再使用類似的恢復步驟進行恢復。
7.說明
- RMAN 也可以實現單個表空間或數據文件的恢復,恢復過程可以在mount 下或open 方式下,如果在open 方式下恢復,可以減少down機時間
- 如果損壞的是一個數據文件,建議 offline 并在 open 方式下恢復
- 這里可以看到,RMAN 進行數據文件與表空間恢復的時候,代碼都比較簡單,而且能保證備份與恢復的可靠性,所以建議采用 RMAN的備份與恢復
總結
以上是生活随笔為你收集整理的Oracle RMAN 备份与恢复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面对SSH暴力破解,给你支个招
- 下一篇: k2p升级显示服务器错误,k2p—b1版