一步一步學RMAN第六篇 實戰RMAN備份

junsansi發表於2007-07-16

念奴嬌·RMAN歷練
秋風細雨,落葉飛,多少RMAN命令,一一銘記,想當年,毫無備份概念。一步一步,一點一滴,多少無眠夜。
春風似剪,萬千心事難寄。RMAN進展迅速,學習路漫漫,幾經測試,錯誤不斷,遍尋線上線下資料,過程痛苦,豁然頓悟時,酣暢淋漓。
我心情願,更看未來睛空。

一步一步學RMAN第一篇 進入RMAN
http://junsansi.itpub.net/post/29894/307688

一步一步學RMAN第二篇 RMAN命令知多少
http://junsansi.itpub.net/post/29894/308749

一步一步學RMAN第三篇 RMAN備份演練初級篇
http://junsansi.itpub.net/post/29894/308751

一步一步學RMAN第四篇 RMAN備份演練進階篇
http://junsansi.itpub.net/post/29894/308752

一步一步學RMAN第五篇 RMAN基礎知識補充 一
http://junsansi.itpub.net/post/29894/308753


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

在寫指令碼之前,我們先明確一下我們的目標:
1、每天夜間1點執行;
2、資料庫全備,同時備份控制檔案及歸檔日誌檔案,備份檔案儲存至:D:ackup目錄下,並在完成歸檔日誌檔案備份後,自動刪除已備份的歸檔日誌;
3、備份保留7天,過期則自動刪除;
4、保留操作日誌備查;

以Windows環境為例(linux環境下與此基本類似,rman的指令碼您甚至連改都不用改,就把呼叫rman指令碼的命令列改改就行了):

1、編寫rman批處理檔案
儲存至:E:oracleScriptackupdatabase_backup_jssweb.rman
RUN {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'd:/backup/%F';
ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT 'd:/backup/%U';
BACKUP DATABASE SKIP INACCESSIBLE FILESPERSET 10
PLUS ARCHIVELOG FILESPERSET 20
DELETE ALL INPUT;
RELEASE CHANNEL CH1;
}
ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK;
CROSSCHECK BACKUPSET;
DELETE NOPROMPT OBSOLETE;

上述的各項命令均在前面幾個章節中提到過,如果有看著眼生的話,再回去翻翻前面。命令是都知曉地,可能有幾個引數會不明白其意義,比如:BACKUP命令中的SKIT INACCESSIBLE引數,大家表著急,靜心等候俺的外。外外。。外外外。。。。(大鍋,看個筆記而已,您不用拎著把菜刀到處晃吧,你你你,你別過來,我說還不成嘛)en,看到大家如此虔誠,俺就提前透露這部分內容吧。
SKIP選項 說明
SKIP INACCESSIBLE:表示跳過不可讀的檔案。我們知道一些offline的資料檔案只要存在於磁碟上就仍然可被讀取,但是可能有些檔案已經被刪除或移到它處造成不可讀,加上這個引數就會跳過這些檔案;
SKIP OFFLINE:跳過offline的資料檔案;
SKIP READONLY:跳過那些所在表空間為read-only的資料檔案;

注意喲,你從網上搜尋rman備份指令碼,可能有些指令碼中會出現一項:sql 'alter system archive log current';這句是讓archivelog日誌歸檔,實際上完全沒必要,我們在第三節的時候講過,通過plus archivelog方式備份時,rman會自動對當前的archivelog進行歸檔。

2、編寫dos批處理
儲存至:E:oracleScriptackupdatabase_backup_jssweb.bat
設定要備份的資料庫sid為jssweb,將日誌按照日期輸出到E:oracleScriptackuplogs目錄。

set oracle_sid=jssweb
rman target / msglog E:oracleScriptackuplogs\%date:~0,10%.log cmdfile=E:oracleScriptackupdatabase_backup_jssweb.rman

3、設定執行計劃
控制皮膚->任務計劃中新增計劃,執行E:oracleScriptackupdatabase_backup_jssweb.bat,設定日程安排中的時間。
竣工!

說是實戰,實際上演練的味道依然濃厚,誰讓我們這是在測試泥。上述指令碼已初具雛形,當然還應該再增加一些更合理的配置,比如根據您的資料庫大小,適當調整通道數量,以及加上日期的判斷,根據時間進行增量備份(關於增量備份,限於篇幅這裡不介紹,俺保證在外傳2儘可能白話,敬請期待)。

  由於三思專職dba生涯剛剛開始,所接觸到的資料庫在體積上都屬於小型資料庫(不超10G),即使每次備份都是全備也是可以接受的,所以在備份策略上能夠非常靈活,或者說隨意。對於那些數百G甚至過T的資料庫,我想就需要很是花些心思來考慮備份策略的問題了,在這方面三思目前還無法給出具有建設性的提議,但是有一點我想是毋庸置疑的:備份不僅僅只是在資料庫崩潰時才會用到,備份是為了更好的恢復。所以我想做好備份與恢復之間開銷的平衡應該是所有備份策略的終極目標吧。

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

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

相關文章