RMAN 初學(xué)者指南
RMAN(Recovery Manager) 是 DBA 的一個(gè)重要工具,用于備份、還原和恢復 oracle 數據庫,前一段時(shí)間有網(wǎng)友找我要,可惜沒(méi)時(shí)間,趁這兩天出差在外沒(méi)什么事,就寫(xiě)了一下,供初學(xué)的朋友參考。本文將介紹 RMAN 的基本操作,更多的信息請參考《 Oracle8i Backup & Recovery Guide 》及 RMAN 手冊,或者是 OCP Student Guide M09096 《 Backup and Recovery Workshop 》 Volume 2 ,也可以通過(guò) gototop@ncn.cn 和我聯(lián)系。 Oracle 自帶的例子參考 $ORACLE_HOME/rdbms/demo 目錄下的 *.rcv 腳本。
一、 RMAN 簡(jiǎn)介
RMAN 可以用來(lái)備份和恢復數據庫文件、歸檔日志和控制文件,也可以用來(lái)執行完全或不完全的數據庫恢復。 RMAN 有三種不同的用戶(hù)接口: COMMAND LINE 方式、 GUI 方式(集成在 OEM 中的備份管理器)、 API 方式(用于集成到第三方的備份軟件中)。具有如下特點(diǎn):
1 )功能類(lèi)似物理備份,但比物理備份強大 N 倍,從下面的特點(diǎn)可以看到;
2 )可以壓縮空塊;
3 )可以在塊水平上實(shí)現增量;
4 )可以把備份的輸出打包成備份集,也可以按固定大小分割備份集;
5 )備份與恢復的過(guò)程可以自動(dòng)管理;
6 )可以使用腳本(存在 Recovery catalog 中)
7 )可以做壞塊監測
二、相關(guān)術(shù)語(yǔ)解釋
1 ) Backup sets 備份集
備份集顧名思義就是一次備份的集合,它包含本次備份的所有備份片,以 oracle 專(zhuān)有的格式保存。一個(gè)備份集根據備份的類(lèi)型不同,可能構成一個(gè)完全備份或增量備份。
2 ) Backup pieces 備份片
一個(gè)備份集由若干個(gè)備份片組成。每個(gè)備份片是一個(gè)單獨的輸出文件。一個(gè)備份片的大小是有限制的;如果沒(méi)有大小的限制, 備份集就只由一個(gè)備份片構成。備份片的大小不能大于你的文件系統所支持的文件長(cháng)度的最大值。
3 ) Image copies 映像備份
映像備份不壓縮、不打包、直接 COPY 獨立文件(數據文件、歸檔日志、控制文件),類(lèi)似操作系統級的文件備份。而且只能 COPY 到磁盤(pán),不能到磁帶??梢宰鳛樵隽總浞莸?0 級,一般用來(lái)備份控制文件。
4 ) Full backup 全備份
全備份是指對數據文件中使用過(guò)的數據塊進(jìn)行備份,沒(méi)有使用過(guò)的數據塊是不做備份的,也就是說(shuō), RMAN 進(jìn)行備份是進(jìn)行壓縮的。
5 ) Incremental backup 增量備份
增量備份是指備份數據文件中自從上一次同一級別的或更低級別的備份以來(lái)被修改過(guò)的數據塊。與完全備份相同,增量備份也進(jìn)行壓縮。增量備份雖然概念很好,備份也很簡(jiǎn)單,但恢復起來(lái)卻是另外一回事,不僅麻煩而且容易出錯,所以實(shí)際中越來(lái)越少使用,到了 Oracle 9i 已經(jīng)建議不再使用,以后版本會(huì )逐漸取消對增量備份的支持。
6 ) Recovery catalog 恢復目錄
恢復目錄用于記錄 RMAN 使用過(guò)程中的控制信息,恢復目錄應該經(jīng)常被同步(這在后面會(huì )講到)。盡管我們可以使用 nocatalog 方式來(lái)使用 RMAN ,此時(shí)控制信息記錄在目標數據庫的控制文件中,但這樣畢竟不安全,因為一旦目標數據庫的控制文件損壞就意味著(zhù)所有的 RMAN 備份失效。同樣的道理恢復目錄應該建立在另外一個(gè)數據庫中,在下面的例子中我們稱(chēng)作“目錄數據庫”。
三、創(chuàng )建恢復目錄
1 、在目錄數據庫中創(chuàng )建恢復目錄所用表空間
SQL> create tablespace rmants datafile ‘c:\oracle\oradata\cc\rmants.ora‘ size 20M ;
表空間已創(chuàng )建。
2 、在目錄數據庫中創(chuàng )建 RMAN 用戶(hù)并授權
SQL> create user rman identified by rman default tablespace rmants temporary tablespace temp quota
unlimited on rmants;
用戶(hù)已創(chuàng )建
SQL> grant recovery_catalog_owner to rman ;
授權成功。
3 、在目錄數據庫中創(chuàng )建恢復目錄
C:\>rman catalog rman/rman
恢復管理器:版本 8.1.7.0.0 - Production
RMAN-06008 :連接到恢復目錄數據庫
RMAN-06428 :未安裝恢復目錄
RMAN>create catalog tablespace rmants;
RMAN-06431 :恢復目錄已創(chuàng )建
4 、注冊目標數據庫到恢復目錄
注意哦,這里我的目標數據庫使用的服務(wù)名稱(chēng)是 rman ,意思為要使用 RMAN 進(jìn)行備份的數據庫,而目錄
數據庫使用的服務(wù)名稱(chēng)是 CC 。
C:\>rman target sys/sys@rman
恢復管理器:版本 8.1.7.0.0 - Production
RMAN-06005 :連接到目標數據庫: RMAN (DBID=1303772234)
RMAN>connect catalog rman/rman@cc
RMAN-06008 :連接到恢復目錄數據庫
RMAN>register database;
RMAN-03022 :正在編譯命令: register
RMAN-03023 :正在執行命令: register
RMAN-08006 :注冊在恢復目錄中的數據庫
RMAN-03023 :正在執行命令: full resync
RMAN-08002 :正在啟動(dòng)全部恢復目錄的 resync
RMAN-08004 :完成全部 resync
好了,到此為止前面的準備工作都做好了,下面就可以使用 RMAN 來(lái)進(jìn)行備份和恢復了。
四、使用 RMAN
下面通過(guò)具體的例子來(lái)說(shuō)明 RMAN 的使用,這里會(huì )涉及到除了恢復以外的所有 RMAN 操作,關(guān)于使用 RMAN 進(jìn)行恢復的內容請參考我以前寫(xiě)的另外一篇文章: RMAN 恢復實(shí)踐。
1 、備份整個(gè)數據庫
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
備份集列表
關(guān)鍵字 Recid 標記 LV 集合標記集合計數完成時(shí)間
------- ---------- ---------- -- ---------- ---------- ----------------------
216 1 417347013 0 417346992 1 26-12 月 -00
備份段列表
關(guān)鍵字 Pc# Cp# 狀態(tài)完成時(shí)間段名
------- --- --- ----------- ---------------------- ------------------------
217 1 1 AVAILABLE 26-12 月 -00 E:\DBBACKUP\2DB.DMP
數據文件包括列表
文件名稱(chēng) LV 類(lèi)型檢查點(diǎn) SCN 檢查點(diǎn)時(shí)間
---- ------------------------------------- -- ---- ---------- -------------
1 C:\ORACLE\ORADATA\RMAN\SYSTEM01.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
數據文件備份列表
關(guān)鍵字文件狀態(tài)完成時(shí)間檢查點(diǎn) SCN 檢查點(diǎn)時(shí)間名稱(chēng)
------- ---- - --------------- ---------- --------------- ------
226 3 A 26-12 月 -00 33226 26-12 月 -00 E:\DBBACKUP\U.DBF
4 、在備份是設置相關(guān)參數
format -- 文件輸出格式,
%d--database name,
%s--backup sets sequence number,
%p--backup pieces sequence number
filesperset -- 每個(gè)備份集中所包括的文件數
更多參數請參考本文開(kāi)始時(shí)列出的書(shū)。
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 :正在啟動(dòng) 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 :已創(chuàng )建 1 段
RMAN-08503 :段 handle=E:\DBBACKUP\DB_RMAN_6_1.BCK comment=NONE
RMAN-08525 :備份集完成,經(jīng)過(guò)時(shí)間: 00:00:03
RMAN-08008 :通道 c1 :正在啟動(dòng) 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 :已創(chuàng )建 1 段
RMAN-08503 :段 handle=E:\DBBACKUP\DB_RMAN_7_1.BCK comment=NONE
RMAN-08525 :備份集完成,經(jīng)過(guò)時(shí)間: 00:00:04
RMAN-08008 :通道 c1 :正在啟動(dòng) 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\SYSTEM01.DBF
RMAN-08011 :備份集中包括當前控制文件
RMAN-08013 :通道 c1 :已創(chuàng )建 1 段
RMAN-08503 :段 handle=E:\DBBACKUP\DB_RMAN_8_1.BCK comment=NONE
RMAN-08013 :通道 c1 :已創(chuàng )建 2 段
RMAN-08503 :段 handle=E:\DBBACKUP\DB_RMAN_8_2.BCK comment=NONE
RMAN-08013 :通道 c1 :已創(chuàng )建 3 段
RMAN-08503 :段 handle=E:\DBBACKUP\DB_RMAN_8_3.BCK comment=NONE
RMAN-08013 :通道 c1 :已創(chuàng )建 4 段
RMAN-08503 :段 handle=E:\DBBACKUP\DB_RMAN_8_4.BCK comment=NONE
RMAN-08013 :通道 c1 :已創(chuàng )建 5 段
RMAN-08503 :段 handle=E:\DBBACKUP\DB_RMAN_8_5.BCK comment=NONE
RMAN-08013 :通道 c1 :已創(chuàng )建 6 段
RMAN-08503 :段 handle=E:\DBBACKUP\DB_RMAN_8_6.BCK comment=NONE
RMAN-08013 :通道 c1 :已創(chuàng )建 7 段
RMAN-08503 :段 handle=E:\DBBACKUP\DB_RMAN_8_7.BCK comment=NONE
RMAN-08525 :備份集完成,經(jīng)過(guò)時(shí)間: 00:00:19
.... ....
RMAN-08008 :通道 c1 :正在啟動(dòng) 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 :已創(chuàng )建 1 段
RMAN-08503 :段 handle=E:\DBBACKUP\DB_RMAN_9_1.BCK comment=NONE
RMAN-08525 :備份集完成,經(jīng)過(guò)時(shí)間: 00:00:07
RMAN-03023 :正在執行命令: partial resync
RMAN-08003 :?jiǎn)?dòng)部分恢復目錄的 resync
RMAN-08005 :完成部分 resync
RMAN-08031 :釋放的通道: c1
5 、使用腳本功能
使用腳本的目的在于方便我們操作中的方便,操作上和存儲過(guò)程相似。
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 :已創(chuàng )建腳本 l0dbbackup
RMAN>run {execute script l0dbbackup; }
創(chuàng )建恢復目錄步驟:
1 、連接目錄數據庫并為目錄創(chuàng )建表空間:
create tablespace rman_ts datafile ‘E:\ORACLE\ORADATA\MYUSR\rman.dbf‘ size 20M default storage(initial 100k next 100k pctincrease 0);
2 、創(chuàng )建恢復管理器用戶(hù):
create user rman identified by rman default tablespace rman_ts temporary tablespace temp quota unlimited on rman_ts;
3 、授予該用戶(hù)維護恢復目錄和執行備份與恢復操作的角色和權限:
grant recovery_catalog_owner to rman;
grant connect,resource to rman;
4 、確保在表空間和回滾段有足夠的空間。目錄需要大約 20m 的空間,回滾段大約為 5m ;
5 、登錄到 os ,運行 rman 命令調用 rman 命令編譯器并創(chuàng )建目錄。使用 MSGLOG(8I 中為 LOG) 選項允許 rman 將信息和命令輸出到文件中。
$rman catalog rman/rman msglog=catalog.log
RMAN> create catalog tablespace rman_ts
RMAN> exit
6 、檢查 rman 創(chuàng )建的 catalog.log 文件(如果沒(méi)指定應在進(jìn)入 rman 前的目錄下),注意在創(chuàng )建恢復目錄過(guò)程中是否有錯誤。如果發(fā)現了任何錯誤,應該刪除目錄擁有者的所有對象并重建它們。
7 、使用 rman 命令連接到包含目標數據庫的服務(wù)器。應以具有 sysdba 權限的用戶(hù)身份登錄到目標數據庫執行所有的備份和恢復操作。
$rman target ‘sys/pass as sysdba‘
RMAN> connect catalog rman/rman
注意:前提條件是已經(jīng)把數據庫置于 archivelog 狀態(tài)
( shutdown immediate;-- 注意不能用 abort
startup mount
alter database archivelog;
alter database open;
)
8 、在恢復目錄中注冊目標數據庫。
RMAN> register database;
注意: rman 是使用內部數據庫標志符( DBID )作為該數據庫的唯一性標識, DBID 是在第一次創(chuàng )建數據庫時(shí)計算出的。如果試圖注冊一個(gè)新的數據庫,而這個(gè)數據庫是通過(guò)拷貝已有數據庫然后更名創(chuàng )建的,那么注冊將失敗。要備份拷貝的數據庫,需要創(chuàng )建一個(gè)新的恢復目錄擁有者,然后在這個(gè)新賬號創(chuàng )建恢復目錄
$rman catalog rman/rman
rman: can‘t open catalog
提示這樣的錯誤,
RMAN> 提示符出現不了。
為什么?
原來(lái)我運行的 rman 命令是 /usr/X11R6/bin/rman
而不是 $ORACLE_HOME/bin/rman
聯(lián)系客服