念奴嬌·RMAN歷練
秋風細雨,落葉飛,多少RMAN命令,一一銘記,想當年,毫無備份概念。一步一步,一點一滴,多少無眠夜。
春風似剪,萬千心事難寄。RMAN進展迅速,學習路漫漫,幾經測試,錯誤不斷,遍尋線上線下資料,過程痛苦,豁然頓悟時,酣暢淋漓。
我心情願,更看未來睛空。
經過前面的若干,我們已經了解並嘗試了rman備份的一些命令,但是在實際環境中,不可能每次備份都要求DBA一條命令一條命令來敲(dba手指頭都痙攣啦,老板看著更是肉疼,早知道就是打幾個字母,雇個打字的,成本不是更低麼),通過前章的學習我們已經立志一定要優化的干活,所以我們應該寫好一段腳本,然後放在服務器端定時執行。DBA只需要時不時看看備份的結果就成了。
在寫腳本之前,我們先明確一下我們的目標:
1、每天夜間1點執行;
2、數據庫全備,同時備份控制文件及歸檔日志文件,備份文件保存至:D:\backup\目錄下,並在完成歸檔日志文件備份後,自動刪除已備份的歸檔日志;
3、備份保留7天,過期則自動刪除;
4、保留操作日志備查;
以Windows環境為例(Linux環境下與此基本類似,rman的腳本您甚至連改都不用改,就把調用rman腳本的命令行改改就行了):
1、編寫rman批處理文件
保存至:E:\OracleScript\backup\database_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 READONLY:跳過那些所在表空間為read-only的數據文件;
注意喲,你從網上搜索rman備份腳本,可能有些腳本中會出現一項:sql 'alter system archive log current';這句是讓archivelog日志歸檔,實際上完全沒必要,我們在第三節的時候講過,通過plus archivelog方式備份時,rman會自動對當前的archivelog進行歸檔。
2、編寫DOS批處理
保存至:E:\OracleScript\backup\database_backup_JSsweb.bat
設定要備份的數據庫sid為JSsweb,將日志按照日期輸出到E:\OracleScript\backup\logs\目錄。
set Oracle_sid=JSsweb
rman target / msglog E:\oracleScript\backup\logs\%date:~0,10%.log cmdfile=E:\OracleScript\backup\database_backup_JSsweb.rman
3、設定執行計劃
控制面板->任務計劃中添加計劃,運行E:\OracleScript\backup\database_backup_JSsweb.bat,設定日程安排中的時間。
竣工!
說是實戰,實際上演練的味道依然濃厚,誰讓咱這是在測試泥。上述腳本已初具雛形,當然還應該再增加一些更合理的配置,比如根據您的數據庫大小,適當調整通道數量,以及加上日期的判斷,根據時間進行增量備份(關於增量備份,限於篇幅這裡不介紹,俺保證在外傳2盡可能白話,敬請期待)。
由於三思專職dba生涯剛剛開始,所接觸到的數據庫在體積上都屬於小型數據庫(不超10G),即使每次備份都是全備也是可以接受的,所以在備份策略上能夠非常靈活,或者說隨意。對於那些數百G甚至過T的數據庫,我想就需要很是花些心思來考慮備份策略的問題了,在這方面三思目前還無法給出具有建設性的提議,但是有一點我想是毋庸置疑的:備份不僅僅只是在數據庫崩潰時才會用到,備份是為了更好的恢復。所以我想做好備份與恢復之間開銷的平衡應該是所有備份策略的終極目標吧。
備份終於完了。別松氣,這僅僅只是開始,加油~~~~~