RMAN 總結篇 2 - (轉)

ningzi82發表於2010-09-24
五,備份的模式,
1),增量備份 寫得累死我了......~:~!!
非歸檔模式,資料庫必須正常下檔後才能實行增量備份,歸檔模式下online & shutdown狀態均可實現增量備份
增量備份是建立在0級備份的基礎之上,最多4級, 關鍵字眼: incremental level=n n<=4 ,當然增量不僅公侷限於整個庫,像tablespce,
datafile,等
rman>backup incremental level=0 database format ....
rman>backup incremental level=1 datafile 'f:system01.dbf' format.....
rman>backup incremental level=2 tablespace users format ....[@more@]

增量備份有differential (差異) 和 cumulative (累積) 二種型別: 預設是差異,如果要手動來設定累積備份可以用如下命令
rman>backup incremental level=1 cumulative database format ...

***注意事項*** 增量備份不一定會縮短時間,也不一定會縮小很多空間:
原因: 在做增量備份,資料庫會檢查所有塊,並於上一級備份做比較,再備份修改塊,如果系統更改頻繁,那麼檢查比較這個動作會相當的
頻繁。速度還會快麼? 同理,空間會縮小很多麼?針對這種狀況,10g就提出了一種新的策略,在資料庫啟用塊修改跟蹤。
sql> alter database enable block change tracking using file '/loaction/trk_filename'; 啟用塊跟蹤
或者用omf特性(oracle-managed files),oracle 會自動建立修改跟蹤檔案
sql> alter database disable block change tracking; 關閉塊跟蹤
sql> select status from v$block_change_tracking; 檢查啟用/關閉情況
***注意事項*** 啟用了塊跟蹤,備份速度快了,備份檔案也可能減少,但恢復時間可能增長,為什麼? 此消彼漲呀兄弟!

增量設定原則:0級老大,後面依次遞減, 小弟能讀老大和兄弟的。老大不能讀手下的。~:~ "好沒面子哦"

2) ,基於時間的備份策略:
rman>configure retention policy to recovery window of n days; 設定備份集的保留時間,即sysdate - backup checkpoing time>=n ,可以有被恢復
過期了就可以用delete obsolete 刪除,
問題: 如果控制檔案備份是否可以長時間保留呢,答案是沒用的,因為control_file_recored_keep_time 這個引數決定了多少時間可用性,應該
把這個引數設成大於在rman中設定的保留時間,你可以透過 v$controlfile_recored_section獲取取控制檔案的可存貯記錄和已存貯記錄.

b,基於冗餘數量的備份保留策略
因為備份時資料檔案以各種形式(備份集或映象複製)存在的備份的數量,如果某個資料檔案冗餘備份數量超出了指定的數量,rman
將廢棄最舊的備份,同樣,基於數量的備份保留策略也是透過configure命令設定
rman>configure retention policy to redundancy n;
rman>configure retention policy to none;
rman> report obsolete;
rman> delete obsolete;
注意,如果這個備份是一個單獨的資料檔案映象,那麼delete 將直接刪除這個映象複製
如果這個備份檔案是備份集的一部分,那只有等到這個備份集都過期後,才能刪除

3),通道的分配
disk 於sbt (是二種裝置),而選擇完裝置後,又要分配幾個通道來備份,即並行度
a, 手工分配通道 命令:(allocate channel) 該關鍵字眼只能在run塊中出現. 有幾個allocate channel,就有幾個通道
format 指定格式和路徑
rman>run{
allocate channel c1 device type disk(&sbt) format 'f:backupcn_%u';
backup tablespace users;
}
理論上要寫釋放通道語句,但執行結束完也會自動釋放通道,

b,自動分配通道
執行下面這些命令後均可自動分配通道
configure device type sbt/disk parallelism n;
configure default device type to sbt/disk;
configure channel device type sbt/disk format ...;
configure channel n device type sbt/disk format...;

4),複合備份 即備份的時候同時備份好幾份
rman> backup copies 3 database;
或利用set backup copies 命令指定複合備份,放在run {} 塊中
rman> run {
set backup copies 3;
backup device type disk format 'f:...','d:...' , ' e:...' ;
tablespace users,asod;
}
備份三份,分別放到不同地方
c, configure ... backup copies 只能用於資料檔案和歸檔日誌檔案當中.
rman>configure default device type to disk;
rman>configure datafile backup copies for device type disk to 2;
rman>configure archivelog backup copies for device type disk to 2;

5),標籤 tag 備份時可以直接給備份集指定一個名稱
如果不特指定備份集名稱,rman會自動指定: 格式"(TAGyyyymmddThhmmss,TAG和T 是固定字元,其他部分是時間)
rman>backup tablespace usrs TAG tbs_usersback; 手工指定備份集的名稱

6),設定備份片段的大小/備份集的大小: maxpiecesize備份片段 & maxsetsize 備份集(最好不要指定備份集,可能失敗)
run{
allocate channel c1 device type disk maxpiecesize=100m format 'f...';
backup database;
}
指定備份片段大小

rman>bakcup database maxsetsize=3.99g; 注意作業系統單個檔案的最大限制,windows為4G,

7),recovery catalog 恢復目錄,這個目錄主要用來存貯備份的資訊,如果沒有這個恢復目錄,就儲存在控制檔案中,但控制
檔案的資訊儲存也是有時間限制的,過期就會自動覆蓋。另外如果控制檔案損壞,則意味著所有rman備份資訊
丟失所以用recovery catalog來解決這個問題.
先來建立這些東東吧:
sql>create tablespace rmantbs datafile 'f:oracleoradatabakdbrmantbs01.dbf' size 50m; 建立空間
sql>grant connect,resource,recovey_catalog_owner to rmanct identified by rmanct; 授傳
sql>rman catalog rmanct/rmanct
rman>create catalog tablespace rmantbs; 在rman中建立catalog;
$rman target / catalog ; 以catalog方式連線到庫
rman>register database 註冊資料庫到catalog,這樣備份資訊就可以儲存到catalog中
注意,如果不是以catalog方式連線到庫,則備份資訊還是記錄在控制檔案當中,這就是備份資訊是否在控制檔案或catalog中的區別,但並不
是說以catalog方式就會比nocatalog方便.
rman>unregister database 取消註冊到catalog中

附加說明,把rman資訊放本地好麼?也不好!萬一庫壞了,也沒得恢復,還是放別處好。方法如下:
192.168.1.205 目標資料庫伺服器(要備份的資料庫)
192.168.1.204 恢復目錄資料庫伺服器(存放要備份的資料庫的恢復資訊)
目標資料庫使用的服務名稱是prod,目錄資料庫使用的服務名稱是test。以下操作均在恢復目錄資料庫伺服器192.168.1.204上進行
1、先在恢復目錄資料庫伺服器192.168.1.204上配置兩個tnsname:prod、test、
2、建立恢復使用者表空間,並賦予許可權(表空間名不應為rman)
$sqlplus / as sysdba
sql>create tablespace rmants datafile 'rmants.bdf' size 20M;
sql>create user rman identified by rman default tablespace rmants ;
sql>grant resource,connect,recovery_catalog_owner to rman;
3、建立恢復目錄
sql>exit
$rman catalog rman/rman
rman>create catalog tablespace rmants;
4、註冊資料庫,其作用是將目標資料庫的RMAN後設資料存放到恢復目錄中
rman>exit
$rman target catalog
rman>register database;
5、檢視是否成功
rman>report schema

8),備份最佳化: 所謂最佳化,就是在備份時rman能省就省,"不完全備份",但又能保證資料的完整性,但當且僅當滿足如下
條件一種或幾種時,備份最佳化就可以實施.具體怎麼個省略最佳化法,演算法不明!高手沒講,哈哈!
configure backup optimization on;
backup database 或backup archivelog 命令中帶有all或like引數
分配的通道僅使用了一種裝置型別,也就是不能同時分配使用sbt,disk的多個通道.

G,備份的壓縮: 子句 as compressed backupset
rman> backup as compressed backupset tablespace system;

9),加密備份: 用二種方法來加密
a)configure 命令 rman>configure encryption for database on; 啟用加密 前提是資料庫已經配好了加密key(應該知道怎麼設了吧)
rman>configure encryption for database off; 關閉加密
rman> configure encryption for tablesapce users on;
b)set encryption 命令 rman>set encryption on identified by ebcbak only; ebcbak是密碼,恢復時用這個密碼恢復

10),其他關鍵字
backup skip: 備份跳過
backup database skip inaccessible: 跳過offline,readonly的資料檔案
filesperset引數
plus archivelog filesperset 20: 注意是指備份集包含檔案的個數,超過新增加一個備份集,不是指備份片段,
allocate channel for maintenance 用於對change,delete,crosscheck命令,也是用來分配通道的,所不同的不能在塊中執行這個命令.

六,rman相關效能檢視查詢:
v$archived_log
v$backup_set
v$backup_piece;
v$backup_corruption;
v$session & v$PROCESS
select sid,osuser,username,machine,process from v$session where client_info like '%id=rman%'; 查詢會話資訊
select s.sid,s.serial#,p.spid,s.client_info form v$process p , v$session s where p.addr=s.paddr and client_info like '%id=rman%';
獲取rman的程式資訊
v$session_longops
select sid,serial#,context,sofar,totalwork,round(sofart/totalwork*100,2) "%_COMPLETE" from v$SESSION_LONGOPS
where opname like 'RMAN:%'
and opname not lide '%AGGREAGE%
and totalwork!=0
and sofar<>totalwork;


七,學了這麼多,現在來寫一個綜合題吧:
run {
configure retention policy to recovery window of 14 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/rcmbackup/oracle/%F';
allocate channel c1 device type disk format '/rcmbackup/oracle/bak0_%U';
backup incremental level=0 database skip inaccessible
plus archivelog filesperset 20
delete all input;
release channel c1;
}
allocate channel for maintenance device type disk;
crosscheck backupset;
delete noprompt obsolete;

現在能看懂了吧.

轉自:http://hi.baidu.com/risowangzz/blog/item/17c70726d6a5f96d34a80fbb.html

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

相關文章