RMAN說,我能備份(14)--實戰RMAN備份

junsansi發表於2010-02-26

塗抹ORACLE試閱章節:第8章-Rman說,我能備份

===========================================================================

8.6 實戰RMAN備份

  通過前面的若干示例,我們已經瞭解並嘗試了RMAN備份的一些命令,但是在實際環境中,不可能每次備份都要求DBA一條命令一條命令來敲(DBA手指頭都痙攣啦,老闆看著更是肉疼,早知道就是打幾個字母,僱個打字的,成本不是更低麼),通過前面章節的學習我們立志一定要優化的幹活,所以我們應該寫好一段指令碼,然後放在伺服器端定時執行。DBA只需要定期看看指令碼執行的結果就成了。

  在真正寫指令碼之前,先明確一下我們的目標:

  • 每天夜間1點執行。
  • 資料庫全備,同時備份控制檔案及歸檔日誌檔案,備份檔案儲存至F:\oracle\backup\目錄下,並在完成歸檔日誌檔案備份後,自動刪除已備份的歸檔日誌。
  • 備份保留14天,過期則自動刪除。
  • 保留操作日誌備查。

  以Windows環境為例(Linux/U NIX 環境下與此基本類似,對於RMAN的指令碼,甚至連改都不用改,就把呼叫RMAN指令碼的命令列以及備份集儲存路徑改改就行了!

8.6.1 編寫 RMAN 批處理檔案

  編寫RMAN批處理檔案:

    RUN {

     CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;

     CONFIGURE CONTROLFILE AUTOBACKUP ON;

     CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO  ' F:\ORACLE\BACKUP\%F ' ;

     ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT  ' F:\ORACLE\BACKUP\BAK_%U ' ;

     BACKUP 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;

  儲存至F: \oracle\script\backup\db_fullbak_jssbook.rman 。

    提示:

    前幾行中的CONFIGURE命令也可以放到批處理指令碼之外執行,只需要執行一次即可,因為所有的CONFIGURE配置都將存入目標端資料庫的控制檔案,只要無人改過就一直有效。

  上述的各項命令均在前面幾個章節中提到過,如果有看著眼生的話,再回去翻看前面的內容。命令是都知曉,可能有幾個引數會不明白其意義。

  比如:BACKUP命令中的SKIP INACCESSIBLE引數,大家彆著急,靜心等候俺的外……外外……外外外……(大鍋,看個筆記而已,您不用拎著把菜刀到處晃吧,你你你,你別過來,我說還不成嘛), en ,看到大家如此虔誠,俺就提前透露這部分內容吧。

(1)BACKUP SKIP引數。

  SKIP INACCESSIBLE :表示跳過不可讀的檔案。我們知道一些 OFFLINE 狀態的資料檔案只要存在於磁碟上就仍然可能被讀取,但是可能有些檔案已經被刪除或移到它處而不可讀,加上這個引數就會跳過這些檔案。

  SKIP OFFLINE :表示跳過 OFFLINE 的資料檔案;

  SKIP READONLY :表示跳過那些所在表空間為 READ   ONLY 的資料檔案。

(2)FILESPERSET引數。

  該引數用來設定一個備份集中最多能夠包含的檔案。本例中是出現在備份歸檔的子句中,因此用來限制每個歸檔備份集中最多隻能包括20個歸檔檔案,如果有超過20個歸檔檔案需要備份的話,那麼在執行備份時會建立多個歸檔檔案的備份集。

  使用BACKUP命令備份其他型別的檔案(除了備份集),也支援FILESPERSET引數,作用是相同的。

(3)ALLOCATE CHANNEL FOR MAINTENANCE命令。

  這個命令乍看與ALLOCATE CHANNEL非常相似,再看還是相似,其實也確實是相似(俺是說相似,沒說相同),ALLOCATE CHANNEL FOR MAINTENANCE命令也是用來分配通道的,但分配的通道專用於CHANGE、DELETE、CROSSCHECK命令,並且也不需要(而且也不能)包含在RUN塊中。

  預設配置下CONFIGURE已經分配了一個指定 DISK 的通道,因此也可以不需要執行ALLOCATE CHANNEL FOR MAINTENANCE命令,另外Oracle也建議通過CONFIGURE分配通道,來替代使用該命令維護管理用的專用通道,這可能會增強備份指令碼的複雜度。

    提示:

    如果你試過從網上搜尋RMAN備份指令碼,可能有些指令碼中會出現一行“sql 'alter system archive log current';”,這句是讓 ARCHIVELOG 日誌歸檔,實際上完全沒必要,我們在前面的內容中講過,通過 PLUS ARCHIVELOG 方式備份時, RMAN 會自動對當前的 ARCHIVELOG 進行歸檔。

8.6.2 編寫命令執行批處理

  設定要備份的資料庫SID為 jssbook ,將日誌按照日期輸出到F:\ oracle\script\backup\logs \ 目錄。

    SET ORACLE_SID=jssbook

    RMAN TARGET/LOG F:\ORACLE\SCRIPT\BACKUP\LOGS\BAK_%DATE: ~ 0,10%.LOG CMDFILE= F:\ORACLE\SCRIPT\BACKUP\ DB_FULLBAK_JSSBOOK.RMAN

  將上述內容儲存至F:\ oracle\script\backup\db_fullbak_jssbook.bat 。

8.6.3 設定執行計劃

  利用“控制皮膚”中的“任務計劃”中的“新增任務計劃”圖示新增計劃,執行F:\ oracle\script\backup\db_fullbak_jssbook.bat ,設定日程安排中的時間為指定中的時間。

  竣工!

  說是實戰,實際上演練的味道依然濃厚,誰讓我們這是在測試呢。上述指令碼已初具雛形,當然還應該再增加一些更合理的配置,比如根據您的資料庫大小,適當調整通道數量,以及加上日期的判斷,根據時間進行增量備份。

  對於小型資料庫(不超100GB)的備份相對來說還是很簡單的,甚至每次備份都是完全備份也可以接受,因此在備份策略上能夠非常靈活,或者說隨意。對於那些數百G甚至過T的資料庫,我想就需要花些心思來考慮備份策略的問題了。

  對於超大型資料庫的備份,基本上就沒有什麼固定套路,畢竟系統環境、儲存裝置及應用的特點都是不同的,不過有一點我想毋庸置疑:備份的目的是為了更好的恢復,因此做好備份與恢復之間開銷的平衡應該是所有備份策略的終極目標。

  備份終於完了。不過別鬆氣,這僅僅只是開始,加油!

=================================================

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

相關文章