RMAN可以用來備份主備用數據庫,如表空間、數據文件、歸檔日志、控制文件、服務器文件與備份集,下面我們分情況進行試驗。
## 一、文件拷貝
原始文件的拷貝,有點類似于OS熱備份,可以拷貝整個數據文件到另外一個地點,但是結果僅僅只能寫入到硬盤,而且單獨的文件是分開的。
數據文件拷貝實例:
~~~
run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
copy # first
datafile 1 to '$HOME/prd1.dbf',
datafile 2 to '$HOME/prd2.dbf';
copy # second
datafile 3 to '$HOME/prd3.dbf';
sql 'alter system archive log current';
}
~~~
## 二、備份與備份集?
RMAN 的常規備份是產生只有 RMAN 才能識別的備份集,所以,除了 copy 命令之外的其他備份,都是RMAN 產生的備份集以及對應的備份片。
如下是備份數據庫的實例,它開啟兩個通道,將數據庫備份到磁帶:
~~~
run {
allocate channel t1 type 'SBT_TAPE';
allocate channel t2 type 'SBT_TAPE';
backup
filesperset 2
format 'df_%t_%s_%p'
database;
}
~~~
RMAN 也可以實現多個鏡相的備份:
~~~
Run{
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
SET BACKUP COPIES 3;
BACKUP DATAFILE 7 FORMAT '/tmp/%U','?/oradata/%U','?/%U';
};
~~~
以下是常見的備份歸檔的例子:
~~~
RMAN>sql ‘alter system archive log current’;
RMAN>backup archivelog all delete input;
RMAN> backup archivelog from time '01-jan-00' until time '30-jun-00';
RMAN> backup archivelog like 'oracle/arc/dest/log%';?? 10
RMAN> backup archivelog all;
RMAN> backup archivelog from logseq 20 until logseq 50 thread 1;
RMAN> backup archivelog from scn 1 until scn 9999;
~~~
在RAC環境中,因為數據庫是共享的,所以可以連接到一個實例就可以備份整個數據庫,但是,因為歸檔日志可以備份在本地,所以 RAC歸檔日志的備份就變的復雜一些,我們可以通過連接到兩個實例的通道來備份兩個實例的歸檔日志。
~~~
run{
ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT ['sys/pass@dbin1'](#);
ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT ['sys/pass@dbin2'](#);
sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';
backup archivelog all delete input format '/u01/dbbak/%U_%s.bak' filesperset = 5;
}
~~~
## 三、常見備份參數
1、Keep參數可以長期的保持特殊的備份或者拷貝,讓它們不受默認備份保持策略的影響,如
~~~
RMAN> BACKUP DATABASE KEEP UNTIL TIME
2> "to_date('31-MAR-2002','DD_MM_YYYY)" nologs;
RMAN> BACKUP TABLESPACE SAMPLE KEEP FOREVER NOLOGS;
~~~
其中 NOLOGS 表示可以不保留該備份以來的歸檔日志,默認是 LOGS,表示保留該備份以來的參數,如果想讓該備份永久有效,可以使用 FOREVER參數。
2、Tag參數指明了備份集的標志,可以達到 30 個字符長度,如
~~~
RMAN> BACKUP DEVICE TYPE DISK DATAFILE 1 TAG
2> "wkly_bkup";
~~~
在 Oracle? 92 版本以后,RMAN 自動提供一個 TAG,格式為 TAGYYYYMMDDTHHMMSS如TAG20020208T133437,通過備份標志 TAG,也可以很方便的從備份集進行恢復,如Restore database from tag=’tag name’
## 四、增量備份
在說明增量備份之前, 首先要理解差異增量與累計增量備份,以及增量備份的備份與恢復原理。差異增量,是默認的增量備份方式。?差異增量是備份上級或同級備份以來變化的塊,累計增量是備份上級備份以來變化的塊。累計增量增加了備份的時間,但是因為恢復的時候,需要從更少的備份集中恢復數據,所以,為了減少恢復的時候,累計增量備份將比差異增量備份更有效。?
不管怎么樣增量備份,在 Oracle 版本 9 中,還是需要比較數據庫中全部的數據塊,這個過程其實也是一個漫長的過程,而且由于增量備份形成多個不同的備份集,使得恢復變的更加不可靠而且速度慢,所以增量備份在版本 9 中仍然是雞肋,除非是很大型的數據倉庫系統,沒有必要選擇增量備份。
Oracle 版本10在增量備份上做了很大的改進,可以使增量備份變成真正意義的增量,因為通過特有的增量日志,使得 RMAN 沒有必要去比較數據庫的每一個數據塊,當然,代價就是日志的IO 與磁盤空間付出,完全還是不適合OLTP系統。另外,版本10 通過備份的合并,使增量備份的結果可以合并在一起,而完全的減少了恢復時間。
增量備份都需要一個基礎,比如0 級備份就是所有增量的基礎備份,0級備份與全備份的不同就是0級備份可以作為其它增量備份的基礎備份而全備份是不可以的, 是否選擇增量備份作為你的備份策略,最終,需要你自己有一個清醒的認識。
以下是零級備份的例子
backup incremental level 0 database;
一級差異增量例子
backup incremental level 1 database;
一級累計增量例子
backup incremental level 1 cumulative database;?? 12
## 五、備份檢查
我們可以通過Validate命令來檢查是否能備份,如數據文件是否存在,是否存在壞塊不能被備份,如:
BACKUP VALIDATE DATABASE;
BACKUP VALIDATE DATABASE ARCHIVELOG ALL;
## 六、重新啟動備份
對于異常結束了的備份,很多人可能不想再重新開始備份了吧,特別是備份到 90%以上,因為異常原因終止了該備份,那怎么辦呢?RMAN 提供一個重新開始備份的方法,通過簡單的命令,你就可以只備份那不到10%的數據了。
~~~
RMAN> BACKUP NOT BACKED UP SINCE TIME 'SYSDATE-14'
2> DATABASE PLUS ARCHIVELOG;
~~~
## 七、RMAN 動態性能視圖
以下是與 RMAN 備份有關系的一些動態性能視圖,信息是從控制文件中獲取的。
~~~
V$ARCHIVED_LOG
V$BACKUP_CORRUPTION
V$COPY_CORRUPTION
V$BACKUP_DATAFILE
V$BACKUP_REDOLOG
V$BACKUP_SET
V$BACKUP_PIECE
V$BACKUP_DEVICE
V$CONTROLFILE_RECORD_SECTION
~~~
這里還有一個視圖,可以大致的監控到 RMAN備份進行的程度。如通過如下的 SQL腳本,
將獲得備份的進度。
~~~
SQL> SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
2 ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
3 FROM V$SESSION_LONGOPS
4 WHERE OPNAME LIKE 'RMAN%'
5 AND OPNAME NOT LIKE '%aggregate%'
6 AND TOTALWORK != 0
7 AND SOFAR <> TOTALWORK;
SID SERIAL# CONTEXT SOFAR??? TOTAL?? WORK %_COMPLETE
---??? -------????? -------??????? -------???? ---------??? ----------
13?? 75????????? 1?????????? 9470????? 15360??? 61.65
12?? 81????????? 1?????????? 15871??? 28160??? 56.36?
~~~
?Oracle社區PDM中文網:[http://www.pdmcn.com/bbs](http://www.pdmcn.com/bbs),?
?Oracle 專家QQ群:60632593、60618621
?Oracle技術資料:《Oracle 9i RMAN參考使用手冊》、《ORACLE10G備份與恢復》、《**Oracle Database 10gRMAN備份與恢復**》
?