天天看點

RMAN簡明教程之四——RMAN備份詳解

       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 産生的備份集以及對應的備份片。

如下是備份資料庫的執行個體,它開啟兩個通道,将資料庫備份到錄音帶:

allocate channel t1 type 'SBT_TAPE';

allocate channel t2 type 'SBT_TAPE';

backup

filesperset 2

format 'df_%t_%s_%p'

database;

      RMAN 也可以實作多個鏡相的備份:

Run{

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{

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 專家QQ群:60632593、60618621

 Oracle技術資料:《Oracle 9i RMAN參考使用手冊》、《ORACLE10G備份與恢複》、《Oracle Database 10gRMAN備份與恢複》