RMAN說,我能備份(9)--RMAN增量備份與備份保留策略

junsansi發表於2010-02-01

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

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

8.5 RMAN 備份演練進階篇

  前篇介紹了使用RMAN進行各種備份,進階篇則主要是RMAN的一些功能擴充套件和增強,學完前面的內容你已經可以完成資料庫的各項備份,而通過對本篇的學習,你可以更好、更快、更科學、更合理……(完形填空,請自覺在適當位置補充8萬個更開頭的形容詞)地完成資料庫的備份。

  本小節的內容又多又雜,為了方便大家閱讀,下面將以選擇題的形式逐個介紹,如果你趕時間那啥,可以只看自己關注的那部分。

8.5.1 是否選擇增量備份

  雖然說用BACKUP命令生成的備份集中只備份那些使用了的資料塊,備份集實際大小已經較目標資料庫的資料檔案小了很多。不過對於修改並不頻繁但資料檔案體積較大的資料庫,在執行備份時肯定就希望有一種功能,備份時如果能夠只備份那些修改過的資料,這樣一來備份集不是又會小很多嗎。這點Oracle自然也想到了,增量備份功能正是為滿足這一需求而出現的。

  如果資料庫執行於非歸檔模式下,那麼你只能在資料庫乾淨關閉(以NORMAL、IMMEDIATE、TRANSACTIONAL方式關閉)的情況下才能進行一致性的增量備份,如果資料庫執行於歸檔模式下,那既可以在資料庫關閉狀態進行,也可以在資料庫開啟狀態進行備份(再次說明了開啟歸檔模式的優勢,歸檔日誌只是多佔些磁碟空間,好處不是一些,是很多,也相當於又給資料庫加了層保險)。

8.5.1.1 增量備份選項

  建立增量備份相當簡單,實質就是指定一個引數INCREMENTAL LEVEL=n,在執行BACKUP命令時加上即可,增量備份可以建立兩個級別,用整型數字0 …n 表示( n 最大不超過4),從0級開始,所有增量備份都必須先建立0級備份。0級備份相當於資料庫的完整備份。

  需要注意,通過BACKUP DATABASE也是建立資料庫的完整備份,但這種的完全備份並不等同於增量備份中的0級備份(雖然都是資料庫的完整備份),因為常規的完全備份中不包含增量備份策略,並不支援在其基礎上建立增量備份集。

  在建立增量備份時,既可以對整庫進行備份,也可以僅對錶空間甚至資料檔案級建立增量備份,例如:

  建立增量級別0的全庫備份:

    RMAN> BACKUP INCREMENTAL LEVEL=0 DATABASE;

  為資料檔案 user01.dbf 建立增量級別1的備份:

    RMAN> BACKUP INCREMENTAL LEVEL=1 DATAFILE  'F:\ORAHOME1\ORADATA\JSSWEB\USERS01.DBF' ;

  為表空間 USERS 建立增量級別1的備份:

    RMAN> BACKUP INCREMENTAL LEVEL=1 TABLESPACE USERS;

8.5.1.2 增量備份型別

  RMAN 提供了兩種增量備份型別: DIFFERENTIAL (差異)和 CUMULATIVE (累積),這兩種增量型別在建立備份集時的演算法是不一樣的。預設情況下 RMAN 建立的增量備份是 DIFFERENTIAL 方式,如果要建立 CUMULATIVE 方式的增量備份,需要在執行BACKUP命令時顯式指定。

  例如,以CUMULATIVE增量備份方式建立資料庫完整備份:

    RMAN> BACKUP INCREMENTAL LEVEL=1 CUMULATIVE DATABASE;

  關於增量備份概念性解釋,比如 DIFFERENTIAL 與 CUMULATIVE 兩種方式間的區別請參考本篇外傳,括弧,外傳整理中,如果您看到本篇的時候外傳還沒出,這個……彆著急,耐心等候,麵包和牛奶都會有的。

8.5.1.3 增量備份注意事項

  不少朋友對RMAN的增量備份認識有誤解,認為通過增量備份,不僅能夠減少備份集大小,而且也會提高備份的效率,節省備份時間,對此我想說,某些極特殊情況下,這種說法不完全錯。

  在9i及之前的版本中,不管是否是增量備份,RMAN在執行備份時都需要先將所有資料塊全部讀入記憶體,檢查每一個資料塊頭的SCN資訊,並與增量備份的父備份集相比較來確定塊是否被修改過。如果發現塊被修改過,則該塊所在的資料檔案都要重新備份(是的,檢查是在塊一級,但備份是資料檔案級)。由此可知,除非你的系統修改非常頻繁(修改太過頻繁的系統是否還有必要建立增量備份,這也是個問題),或者I/O裝置效率驚人(我是說,驚人的慢),不然增量備份只是節省了儲存空間,既不能減少備份時間,也不能達到提高備份效率的目的,甚至還有可能導致備份時間更長(因為多了資料塊檢查的操作)。

  在10g中Oracle提供了一個新的特性:塊修改跟蹤(Block Change Tracking)。啟用塊修改跟蹤後,RMAN不用再去掃描資料檔案中的每一個塊了,直接通過塊修改跟蹤檔案就可以獲取哪些塊發生了修改的資訊。

    提示:

    可通過下列語句啟用塊修改跟蹤:

    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;

  需要提醒一句,務必要認識到,雖然備份時間可能減短,並且備份集大小可能減小,但是進行恢復操作時,所需花費的時間有可能會增加,因為資料庫恢復時不得不讀取多個備份集才能完成恢復操作。

  備份與恢復本身就是相對的,有個成語叫此消彼漲用來形容它倆的關係再合適不過。

8.5.2 是否使用RMAN備份集的保留策略

  策略,嘖嘖,想不到我們也能說出這麼專業的詞兒啊,人家說專家就是能把任何事務都描述得很專業,俺一定要再多學幾個類似的詞,要讓自己離專家的距離更近一些,或者,俺直接搬到專家們床頭邊上住去。

  如果你所管理的資料庫規模非常大,並且備份執行也比較頻繁(廢話,不大不頻繁也得這麼幹,優秀的DBA一定要擁有對應其身份的良好的工作習慣),有必要對你這些備份檔案的儲存制訂合理的策略。該挪的挪,該搬的搬,該刪除的刪,合理釋放,最大化利用有限的磁碟空間嘛。

  在通過RMAN建立的備份片段中,由於備份檔案也是由RMAN建立和維護,所以手工刪除並不明智,並且RMAN也提供了備份保留策略,合理制訂,由RMAN自動刪除過舊的備份檔案更加安全也更加方便。

  RMAN 中提供了兩種備份保留策略:基於時間和基於冗餘數量的備份保留策略。

8.5.2.1 基於時間的備份保留策略

  說得簡單些,就是你希望資料庫最早能恢復到幾天前。比如將恢復時間段設定為7,那麼RMAN所保留的備份就是可以保證你將資料庫恢復到一週內任何時刻下的那些檔案。

  設定基於時間的備份保留策略可以通過CONFIGURE命令,例如:

    RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF n DAYS;

  注:n=大於0的正整數。

  執行該命令後,RMAN將始終保留那些將資料庫恢復到n天前的狀態時需要用到的備份,比如,恢復時間段被設定為7天,那麼各個資料檔案的備份必須滿足如下條件:

    SYSDATE - BACKUP CHECKPOINT TIME >= 7

  任何不滿足上述條件的備份都將被RMAN廢棄並可通過DELETE OBSOLETE命令刪除。O K ,基本知識講完了,下面考驗你的時刻到了,提問:如果滿足條件的備份你也想刪,咋整?啥?這麼快就忘了?趕緊再回去看看8.3節。

    提示:

    控制檔案中記錄儲存時間有可能對備份保留策略影響!

    對於在NOCATALOG下建立的備份,RMAN的備份集資訊都是儲存在目標端控制檔案中,不過需要注意的是,Oracle資料庫的控制檔案並不是無限擴充套件,其中能夠儲存的記錄也是有限的,對於RMAN的備份資訊來說,控制檔案中儲存的這部分資訊受制於初始化引數:CONTROL_FILE_RECORD_KEEP_TIME。

    初始化引數CONTROL_FILE_RECORD_KEEP_TIME用來指定記錄在控制檔案中的最少儲存時間,以天為單位,預設值為7。也就是說預設情況下備份集資訊最短會在控制檔案中儲存7天,超過7天以後,如果控制檔案由於空間不足(控制檔案中並不僅僅只儲存備份集資訊)需要重用記錄,那麼超出7天的記錄可能會被自動覆蓋,在重用記錄時它並不管你在RMAN中設定的備份保留時間是多久(控制檔案在Oracle資料庫中的地位那是相當高的)。

    因此對於基於時間的備份保留策略,一般建議CONTROL_FILE_RECORD_ KEEP_TIME初始化引數值不小於你在RMAN中設定的備份保留時間。

    另外,CONTROL_FILE_RECORD_KEEP_TIME初始化引數也有可能對基於冗餘數量的備份策略造成影響,只不過冗餘數量無法直接與時間作對比,因此在設定值時,DBA只能視實際情況,根據備份時建立的備份集可能佔用的空間來估計初始化引數CONTROL_FILE_RECORD_KEEP_TIME的引數值了。

    當前控制檔案中分配的空間中,可儲存記錄和已儲存記錄數,可以通過查詢檢視V$CONTROLFILE_RECORD_SECTION獲取。

8.5.2.2 基於冗餘數量的備份保留策略

  基於冗餘數量實質上是某個資料檔案以各種形式(包括備份集和映象複製)存在的備份的數量。如果某個資料檔案的冗餘備份數量超出了指定數量,RMAN將廢棄最舊的備份。

  同樣,基於數量的備份保留策略也是通過CONFIGURE命令設定,例如:

    RMAN> CONFIGURE RETENTION POLICY TO  REDUNDANCY n ;

  n= 大於0的正整數。

  DBA 也可以通過下列命令設定成不採用任何備份保留策略:

    RMAN> CONFIGURE RETENTION POLICY TO NONE;

  如果不設定任何備份保留策略,使用REPORT OBSOLETE和DELETE OBSOLETE命令時也不會有任何匹配的記錄,不過REPORT OBSOLETE和DELETE OBSOLETE命令也支援REDUNDANCY和RECOVERY WINDOW引數,引數值的對應規則與CONFIGURE命令配置備份保留策略完全相同,因此如果你決定將顯示和刪除過期的命令寫在指令碼中定期執行的話,不通過備份保留策略,而是直接通過REPORT和DELETE命令本身實現這一點也是可行的。

8.5.2.3 根據備份策略維護備份集

  為RMAN設定了備份保留策略之後,RMAN會自動判斷哪些備份集或映象複製檔案不必再保留。這些備份檔案將會被標記為“廢棄”(Obsolete),可以通過REPORT OBSOLETE命令檢視當前處於廢棄狀態的備份檔案,或者通過DELETE OBSOLETE命令刪除這些廢棄的備份。例如:

    RMAN>   REPORT OBSOLETE;

    正在使用目標資料庫控制檔案替代恢復目錄

    RMAN 保留策略將應用於該命令

    將 RMAN 保留策略設定為 3 天的恢復視窗

    已廢棄的備份和副本報表

    型別                 關鍵字   完成時間            檔名/控制程式碼

    -------------------- ------   ------------------  --------------------

    備份集                   21   04-7月 -07

    備份段                   21   04-7月 -07           D:\BACKUP\C-3391142503-20070704-01

    RMAN>   DELETE OBSOLETE;

    RMAN 保留策略將應用於該命令

    將 RMAN 保留策略設定為 3 天的恢復視窗

    分配的通道: ORA_DISK_1

    通道 ORA_DISK_1: sid=14 devtype=DISK

    刪除以下已廢棄的備份和副本:

    型別                 關鍵字   完成時間            檔名/控制程式碼

    -------------------- ------   ------------------  --------------------

    備份集                   21   04-7月 -07

    備份段                   21   04-7月 -07           D:\BACKUP\C-3391142503-20070704-01

    是否確定要刪除以上物件 (輸入 YES 或 NO)? y

    已刪除備份段

    備份段 handle=D:\BACKUP\C-3391142503-20070704-01 recid=21 stamp=627061645

    1 物件已刪除

  在執行刪除命令時有兩點需要了解:

  • 如果被判斷為廢棄的備份是一個單獨資料檔案的映象複製,那麼在執行DELETE命令時將直接刪除這個映象複製檔案。
  • 如果被判斷為廢棄的備份是一個備份集中的一部分,則必須等到整個備份集中所有其他檔案都被廢棄之後,才能刪除這個備份集。

  對於增量備份,不管是基於時間還是基於冗餘數量,RMAN都是檢測0級備份是否滿足需求。

    提示:

    這裡注意RMAN對於 OBSOLETE 和 EXPIRED 的定義,對於手工刪除的檔案,物理上已經不存在的,在執行了 CROSSCHECK 命令之後, RMAN 將其標記為 EXPIRED ;對於那些超出了備份保留策略的備份集備份片段,則標記為 OBSOLETE 。

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

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

相關文章