RMAN 初學者指南
2024-07-21 02:06:44
供稿:網友
 
rman 初學者指南
轉自聚賢莊  作者:gototop 
============================================ 
這篇文章是去年寫的了,最初發表在chinaunix.net的oracle論壇里,收錄在舊版文集中,可能很多沒有看到,總有人寫信要,今天乘改版之際就把它單獨拿出來了。(gototop 2003.6.24注) 
  
rman(recovery manager)是dba的一個重要工具,用于備份、還原和恢復oracle數據庫,前一段時間有網友找我要,可惜沒時間,趁這兩天出差在外沒什么事,就寫了一下,供初學的朋友參考。本文將介紹rman 的基本操作,更多的信息請參考《oracle8i backup & recovery guide》及rman 手冊,或者是ocp student guide m09096《backup and recovery workshop》volume 2,也可以通過 [email protected] 和我聯系。oracle 自帶的例子參考$oracle_home/rdbms/demo 目錄下的*.rcv腳本。 
  
一、rman 簡介 
  
rman 可以用來備份和恢復數據庫文件、歸檔日志和控制文件,也可以用來執行完全或不完全的數據庫恢復。rman有三種不同的用戶接口:command line方式、gui 方式(集成在oem 中的備份管理器)、api 方式(用于集成到第三方的備份軟件中)。具有如下特點: 
1)功能類似物理備份,但比物理備份強大n倍,從下面的特點可以看到; 
2)可以壓縮空塊; 
3)可以在塊水平上實現增量; 
4)可以把備份的輸出打包成備份集,也可以按固定大小分割備份集; 
5)備份與恢復的過程可以自動管理; 
6)可以使用腳本(存在recovery catalog 中) 
7)可以做壞塊監測 
  
二、相關術語解釋 
1)backup sets 備份集 
備份集顧名思義就是一次備份的集合,它包含本次備份的所有備份片,以oracle專有的格式保存。一個備份集根據備份的類型不同,可能構成一個完全備份或增量備份。 
2)backup pieces 備份片 
一個備份集由若干個備份片組成。每個備份片是一個單獨的輸出文件。一個備份片的大小是有限制的;如果沒有大小的限制, 備份集就只由一個備份片構成。備份片的大小不能大于你的文件系統所支持的文件長度的最大值。 
3)image copies 映像備份 
映像備份不壓縮、不打包、直接copy 獨立文件(數據文件、歸檔日志、控制文件),類似操作系統級的文件備份。而且只能copy 到磁盤,不能到磁帶??梢宰鳛樵隽總浞莸?級,一般用來備份控制文件。 
4)full backup 全備份 
全備份是指對數據文件中使用過的數據塊進行備份,沒有使用過的數據塊是不做備份的,也就是說,rman 進行備份是進行壓縮的。 
5)incremental backup 增量備份 
增量備份是指備份數據文件中自從上一次同一級別的或更低級別的備份以來被修改過的數據塊。與完全備份相同,增量備份也進行壓縮。增量備份雖然概念很好,備份也很簡單,但恢復起來卻是另外一回事,不僅麻煩而且容易出錯,所以實際中越來越少使用,到了oracle 9i已經建議不再使用,以后版本會逐漸取消對增量備份的支持。 
6)recovery catalog 恢復目錄 
恢復目錄用于記錄rman 使用過程中的控制信息,恢復目錄應該經常被同步(這在后面會講到)。盡管我們可以使用nocatalog 方式來使用rman,此時控制信息記錄在目標數據庫的控制文件中,但這樣畢竟不安全,因為一旦目標數據庫的控制文件損壞就意味著所有的rman 備份失效。同樣的道理恢復目錄應該建立在另外一個數據庫中,在下面的例子中我們稱作“目錄數據庫”。 
  
三、創建恢復目錄 
1、在目錄數據庫中創建恢復目錄所用表空間 
sql> create tablespace rmants datafile 'c:/oracle/oradata/cc/rmants.ora' size 20m ; 
表空間已創建。 
2、在目錄數據庫中創建rman 用戶并授權 
sql> create user rman identified by rman default tablespace rmants temporary tablespace temp quota 
unlimited on rmants; 
用戶已創建 
sql> grant recovery_catalog_owner to rman ; 
授權成功。 
3、在目錄數據庫中創建恢復目錄 
c:/>rman catalog rman/rman 
恢復管理器:版本8.1.7.0.0 - production 
rman-06008:連接到恢復目錄數據庫 
rman-06428:未安裝恢復目錄 
rman>create catalog tablespace rmants; 
rman-06431:恢復目錄已創建 
4、注冊目標數據庫到恢復目錄 
注意哦,這里我的目標數據庫使用的服務名稱是rman,意思為要使用rman 進行備份的數據庫,而目錄 
數據庫使用的服務名稱是cc。 
c:/>rman target sys/[email protected] 
恢復管理器:版本8.1.7.0.0 - production 
rman-06005:連接到目標數據庫:rman (dbid=1303772234) 
rman>connect catalog rman/[email protected] 
rman-06008:連接到恢復目錄數據庫 
rman>register database; 
rman-03022:正在編譯命令:register 
rman-03023:正在執行命令:register 
rman-08006:注冊在恢復目錄中的數據庫 
rman-03023:正在執行命令:full resync 
rman-08002:正在啟動全部恢復目錄的resync 
rman-08004:完成全部resync 
好了,到此為止前面的準備工作都做好了,下面就可以使用rman 來進行備份和恢復了。 
  
四、使用rman 
下面通過具體的例子來說明rman 的使用,這里會涉及到除了恢復以外的所有rman 操作,關于使用rman 進行恢復的內容請參考我以前寫的另外一篇文章:rman 恢復實踐。 
1、備份整個數據庫 
rman>run { 
2> allocate channel c1 type disk; 
3> backup database format 'e:/dbbackup/2db.dmp'; 
4> } 
2、復制數據文件 
rman>run { 
2> allocate channel c1 type disk; 
3> copy datafile 'c:/oracle/oradata/rman/users01.dbf' to 'e:/dbbackup/u.dbf' tag 
=u1215; 
4> } 
3、查看備份及復制的信息 
rman>list backup; 
rman-03022:正在編譯命令:list 
備份集列表 
關鍵字recid 標記lv 集合標記集合計數完成時間 
------- ---------- ---------- -- ---------- ---------- ---------------------- 
216 1 417347013 0 417346992 1 26-12 月-00 
備份段列表 
關鍵字pc# cp# 狀態完成時間段名 
------- --- --- ----------- ---------------------- ------------------------ 
217 1 1 available 26-12 月-00 e:/dbbackup/2db.dmp 
數據文件包括列表 
文件名稱lv 類型檢查點scn 檢查點時間 
---- ------------------------------------- -- ---- ---------- ------------- 
1 c:/oracle/oradata/rman ystem01.dbf 0 full 33224 26-12 月-00 
2 c:/oracle/oradata/rman/rbs01.dbf 0 full 33224 26-12 月-00 
3 c:/oracle/oradata/rman/users01.dbf 0 full 33224 26-12 月-00 
4 c:/oracle/oradata/rman/temp01.dbf 0 full 33224 26-12 月-00 
5 c:/oracle/oradata/rman/tools01.dbf 0 full 33224 26-12 月-00 
6 c:/oracle/oradata/rman/indx01.dbf 0 full 33224 26-12 月-00 
rman>list copy of datafile 'c:/oracle/oradata/rman/users01.dbf'; 
rman-03022:正在編譯命令:list 
數據文件備份列表 
關鍵字文件狀態完成時間檢查點scn 檢查點時間名稱 
------- ---- - --------------- ---------- --------------- ------ 
226 3 a 26-12 月-00 33226 26-12 月-00 e:/dbbackup/u.dbf 
4、在備份是設置相關參數 
format --文件輸出格式, 
%d--database name, 
%s--backup sets sequence number, 
%p--backup pieces sequence number 
filesperset --每個備份集中所包括的文件數 
更多參數請參考本文開始時列出的書。 
rman>run { 
2> allocate channel c1 type disk; 
3> set limit channel c1 kbytes 8000; 
4> backup 
5> format 'e:/dbbackup/db_%d_%s_%p.bck' 
6> (database filesperset=2 ); 
7> } 
rman-03022:正在編譯命令:allocate 
rman-03023:正在執行命令:allocate 
rman-08030:分配的通道:c1 
rman-08500:通道c1:sid=9 devtype=disk 
rman-03022:正在編譯命令:set limit 
rman-03023:正在執行命令:set limit 
rman-03022:正在編譯命令:backup 
rman-03023:正在執行命令:backup 
rman-08008:通道c1:正在啟動full 數據文件備份集 
rman-08502:set_count=6 set_stamp=417351064 creation_time=26-12 月-00 
rman-08010:通道c1:正在指定備份集中的數據文件 
rman-08522:輸入數據文件fno=00003 name=c:/oracle/oradata/rman/users01.dbf 
rman-08522:輸入數據文件fno=00005 name=c:/oracle/oradata/rman/tools01.dbf 
rman-08013:通道c1:已創建1 段 
rman-08503:段handle=e:/dbbackup/db_rman_6_1.bck comment=none 
rman-08525:備份集完成,經過時間:00:00:03 
rman-08008:通道c1:正在啟動full 數據文件備份集 
rman-08502:set_count=7 set_stamp=417351067 creation_time=26-12 月-00 
rman-08010:通道c1:正在指定備份集中的數據文件 
rman-08522:輸入數據文件fno=00002 name=c:/oracle/oradata/rman/rbs01.dbf 
rman-08522:輸入數據文件fno=00006 name=c:/oracle/oradata/rman/indx01.dbf 
rman-08013:通道c1:已創建1 段 
rman-08503:段handle=e:/dbbackup/db_rman_7_1.bck comment=none 
rman-08525:備份集完成,經過時間:00:00:04 
rman-08008:通道c1:正在啟動full 數據文件備份集 
rman-08502:set_count=8 set_stamp=417351071 creation_time=26-12 月-00 
rman-08010:通道c1:正在指定備份集中的數據文件 
rman-08522:輸入數據文件fno=00001 name=c:/oracle/oradata/rman ystem01.dbf 
rman-08011:備份集中包括當前控制文件 
rman-08013:通道c1:已創建1 段 
rman-08503:段handle=e:/dbbackup/db_rman_8_1.bck comment=none 
rman-08013:通道c1:已創建2 段 
rman-08503:段handle=e:/dbbackup/db_rman_8_2.bck comment=none 
rman-08013:通道c1:已創建3 段 
rman-08503:段handle=e:/dbbackup/db_rman_8_3.bck comment=none 
rman-08013:通道c1:已創建4 段 
rman-08503:段handle=e:/dbbackup/db_rman_8_4.bck comment=none 
rman-08013:通道c1:已創建5 段 
rman-08503:段handle=e:/dbbackup/db_rman_8_5.bck comment=none 
rman-08013:通道c1:已創建6 段 
rman-08503:段handle=e:/dbbackup/db_rman_8_6.bck comment=none 
rman-08013:通道c1:已創建7 段 
rman-08503:段handle=e:/dbbackup/db_rman_8_7.bck comment=none 
rman-08525:備份集完成,經過時間:00:00:19 
.... .... 
rman-08008:通道c1:正在啟動full 數據文件備份集 
rman-08502:set_count=9 set_stamp=417351090 creation_time=26-12 月-00 
rman-08010:通道c1:正在指定備份集中的數據文件 
rman-08522:輸入數據文件fno=00004 name=c:/oracle/oradata/rman/temp01.dbf 
rman-08013:通道c1:已創建1 段 
rman-08503:段handle=e:/dbbackup/db_rman_9_1.bck comment=none 
rman-08525:備份集完成,經過時間:00:00:07 
rman-03023:正在執行命令:partial resync 
rman-08003:啟動部分恢復目錄的resync 
rman-08005:完成部分resync 
rman-08031:釋放的通道:c1 
5、使用腳本功能 
使用腳本的目的在于方便我們操作中的方便,操作上和存儲過程相似。 
rman>create script l0dbbackup { 
2> allocate channel c1 type disk; 
3> backup 
4> format 'e:/dbbackup/db_%d_%s_%p.bck' 
5> (database filesperset=2 ); 
6> } 
rman-03022:正在編譯命令:create script 
rman-03023:正在執行命令:create script 
rman-08085:已創建腳本l0dbbackup 
rman>run {execute script l0dbbackup; }