天天看點

RMAN備份之增量備份

我們可以用 RMAN進行 資料庫、表空間和資料檔案的增量 備份。

如果資料庫運作在歸檔模式,在資料庫OPEN狀态我們可以進行增量備份;如果資料庫處于非歸檔方式,在資料庫CLOSE狀态我們也可以進行增量備份。增量備份隻備份上次備份以來變化過的資料塊。

每個資料塊都包含一個system change number (SCN),記錄着該資料塊的最後改變。在進行增量備份的時候,RMAN将沒給資料塊的SCN和父級增量備份的CHECKPOINT SCN進行比較,如果該資料塊的SCN大于等于父級的CHECKPOINT SCN,RMAN将備份該資料塊。

為了提高資料庫增量備份的性能,我們可以指定變化跟蹤檔案來監控資料塊的改變:

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE 'd:/backup/rman_change.trc' REUSE;

SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;

可以通過以下指令查詢:

SQL> SELECT FILENAME,STATUS FROM V$BLOCK_CHANGE_TRACKING

移動跟蹤檔案:

SQL>SELECT filename FROM V$BLOCK_CHANGE_TRACKING;

SQL>SHUTDOWN IMMEDIATE;

SQL>HOST COPY OLDFILE NEWFILE

SQL>STARTUP MOUNT;

SQL>ALTER DATABASE RENAME FILE ‘OLD_FILE' TO ‘NEW_FILE’;

SQL>ALTER DATABASE OPEN;

如果不能關閉資料庫,必須禁用跟蹤檔案然後移動跟蹤檔案:

ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;

ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE 'new_location';

增量備份分為兩種:差異增量備份和累積增量備份。預設的增量備份是差異增量備份。

差異增量備份:備份同級或者上級(如果有同級備份,先找同級)備份(差異或者累積)以來變化的資料塊。如果找不到同級或者上級(知道LEVEL0),如果ORACLE版本>=10.0.0,RMAN将COPY從資料檔案建立開始所有的資料塊作為LEVEL1備份;如果ORACLE版本<10.0.0,RMAN将生成LEVEL0備份。

周日:RMAN備份所有被使用過的資料塊。周一至周六:RMAN備份自從上次LEVEL0或者LEVEL1備份以來變化的資料塊。

累積增量備份:備份上級備份以來變化的資料塊。

周日:RMAN備份所有被使用過的資料塊。

周一至周六:RMAN備份自從上次LEVEL0備份以來變化的資料塊。    

我們可以看出累積增量備份備份檔案要比差異增量備份檔案大,因為累積增量備份重複備份了同級别備份的資料塊。

制定一個恰當的備份政策是很重要的,通常我們在有50%的資料塊改變的時候,進行一次LEVEL0級别的備份。可以通過以下查詢來獲得資料塊增量備份已經備份50%以上的資料塊。

SELECT FILE#, INCREMENTAL_LEVEL, COMPLETION_TIME, BLOCKS, DATAFILE_BLOCKS

  FROM V$BACKUP_DATAFILE

  WHERE INCREMENTAL_LEVEL > 0

  AND BLOCKS / DATAFILE_BLOCKS > .5

  ORDER BY COMPLETION_TIME;

增量備份示例:

RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;

RMAN> BACKUP INCREMENTAL LEVEL 1 TABLESPACE SYSTEM DATAFILE 'ora_home/oradata/ tools01.dbf';

RMAN> BACKUP INCREMENTAL LEVEL = 1 CUMULATIVE TABLESPACE users;

增量追加備份:前滾鏡像拷貝

ORACLE文檔原文:Incrementally Updated Backups: Rolling Forward Image Copy Backups.

增量追加備份工作原理:首先建立一個檔案鏡像拷貝,然後定期把從上次鏡像拷貝最大SCN以來變化的資料塊追加到鏡像拷貝檔案中。增量追加備份可以達到快速恢複的目的,如果是每天進行增量追加的話,在進行恢複的時候,我們最多應用一天的REDO資料就可以完成恢複。

建立增量追加備份,格式如下:

BACKUP... FOR RECOVER OF COPY WITH TAG

一個基礎的增量追加備份示例:簡稱basic腳本:

RUN ...{

 RECOVER COPY OF DATABASE WITH TAG 'incr_update';

 BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE;

   }

為了了解上述腳本,我們先看一下如果沒有資料檔案拷貝和增量備份運作這兩個腳本的情況。

1、如果沒有LEVEL0備份或者備份檔案拷貝,執行BACKUP INCREMENTAL LEVEL 1…… FOR RECOVER OF COPY WITH TAG……不能産生LEVEL1增量備份檔案,但是RMAN會按照指定的tag在DATAFILE對應的目錄下建立一分鏡像檔案拷貝。

2、如果沒有LEVEL0備份或者備份檔案拷貝,執行RECOVER COPY OF DATABASE WITH TAG……則生成一些資訊但是不産生錯誤。

我們看一下整個basic腳本的執行情況:

第一次運作該腳本沒有資料檔案拷貝和增量備份是以執行RECOVER COPY OF DATABASE WITH TAG 'incr_update'沒有任何結果;執行BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE将産生資料檔案的鏡像檔案拷貝。

第二次運作該腳本,由于第一次運作的時候BACKUP INCREMENTAL LEVEL 1…… FOR RECOVER OF COPY WITH TAG……指令産生一個鏡像檔案拷貝,但是沒有LEVEL1的增量備份,是以執行RECOVER COPY OF DATABASE WITH TAG 'incr_update'還是沒有任何結果;執行BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE将産生LEVEL1增量備份。

第三次運作該腳本,執行RECOVER COPY OF DATABASE WITH TAG 'incr_update'指令将把第二次執行該腳本産生的LEVEL1增量備份追加到鏡像檔案拷貝,同時又産生一個新的LEVEL1增量備份檔案。

以後再執行該腳本都是把上次産生的LEVEL1的增量備份追加到鏡像檔案拷貝,然後再産生一個新的LEVEL1的增量備份檔案。

如果需要恢複,我們首先恢複鏡像檔案拷貝和最後一次LEVEL1增量備份,最後應用REDO

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

轉載于:http://blog.itpub.net/25472150/viewspace-691050/