摘要:以下腳本是我在項目工作中使用的備份腳本,腳本都是自己寫的。簡介此套腳本可以實現對數據庫實現全備份和增量備份。綜合以上兩種利弊,比較好的方式是在出現丟失備份或的情況下,通知管理員處置,手工處理之后備份腳本運行恢復正常。
以下腳本是我在項目工作中使用的備份腳本,腳本都是自己寫的。但在使用過程中,感覺還有提供空間,我這個人有點懶,所以想用將腳本“開源”出來的方式督促自己完善這一套腳本。大家如果對此腳本有什么建議,隨時可以提出來大家一起提高。
簡介此套腳本可以實現對oracle數據庫實現全備份和增量備份。主要由rman_level0.cmd和rman_level1.cmd組成。
其中,rman_level0.cmd引用rman_level0.rcv作為rman命令輸入,rman_level1.cmd引用rman_level1.rcv作為rman命令輸入。
此套腳本使用的目錄結構如下:
其中,
archlog 存放歸檔日志備份
cntrfile 控制文件備份
data 數據庫文件備份
log 備份日志
scripts 備份腳本相關
腳本內容rman_level0.bat
rman target / CMDFILE "D:ackup man_backupscripts man_level0.rcv" LOG D:ackup man_backuploglevel0_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
rman_level0.rcv
run { sql "alter system archive log current"; allocate channel c1 type disk; backup as compressed backupset incremental level 0 format "D:ackup man_backupdatalevel0_%T_%t_s%s_p%p" database plus archivelog format "D:ackup man_backuparchlogarchlog_%T_t%t_s%s_p%p" delete input; backup format "D:ackup man_backupcntrfilecontrolfile_%T_s%s_p%p" current controlfile; release channel c1; crosscheck backup; delete noprompt obsolete; crosscheck archivelog all; } exit;
rman_level1.cmd
rman target / CMDFILE "D:ackup man_backupscripts man_level1.rcv" LOG D:ackup man_backuploglevel1_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
rman_level1.rcv
run { sql "alter system archive log current"; allocate channel c1 type disk; backup as compressed backupset incremental level 1 format "D:ackup man_backupdatalevel1_%T_%t_s%s_p%p" database plus archivelog format "D:ackup man_backuparchlogarchlog_%T_t%t_s%s_p%p" delete input; backup format "D:ackup man_backupcntrfilecontrolfile_%T_s%s_p%p" current controlfile; release channel c1; crosscheck backup; delete noprompt obsolete; crosscheck archivelog all; } exit;存在的問題及解決
目前日期字符串是使用從date和time命令的輸出中截取需要的字符,組成需要的字符串。
第1種情況,當time在0-9時之間時,字符串輸出如下:
C:UsersYangJia>echo %date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%t ime:~6,2% 20140119_ 10802
第2中情況,當time在10-23之間時,字符串輸出如下:
C:UsersYangJia>echo %date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%t ime:~6,2% 20140119_230953
這個時候問題就出現了,當運行腳本時屬于第一種情況,腳本會認為LOG參數在"_"之后就結束了,導致最終生成的日志文件名出現不完整的情況。
解決此問題有兩個思路,一是將多出來的空格去掉,二是讓cmd認為腳本并不是從空格處就結束 了。
以下針對兩種思路給出方法:
第一種思路:
將log文件名使用%filename%變量替換,設置%filename%變量之前,對日期格式進行判斷,然后設置%filename%內容:
set logfile=level0_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log if "%time:~0,1%" == " " ^ set logfile=level0_%date:~0,4%%date:~5,2%%date:~8,2%_0%time:~1,1%%time:~3,2%%time:~6,2%.log
這部分解決有參考http://stackoverflow.com/questions/1192476/windows-batch-script-format-date-and-time
rman中刪除無效(expired)備份和archivelog的方式一般步驟是:
1. crosscheck backup &crosscheck archivelog all
2. delete expired backup;
3. delete expired archivelog;
如果將以上操作加入到腳本中,無效(expired)備份和archivelog會被自動清理掉,這樣可能就會在不知情的情況下導致丟失recovery window中的片段,導致recovery window不完整。
如果不加入備份腳本,在有無效(expired)備份和歸檔日志的情況下,就會出現備份archivelog失敗導致整個備份腳本運行失敗,可能會導致歸檔日志不能自動清除將磁盤空間占滿。
綜合以上兩種利弊,比較好的方式是:在出現丟失備份或archivelog的情況下,通知管理員處置,手工處理之后備份腳本運行恢復正常。即使真的有archivelog丟失,在管理員已知曉的情況下,可以規避對恢復窗口的影響。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/8683.html
閱讀 1402·2021-11-22 09:34
閱讀 1378·2021-09-22 14:57
閱讀 3400·2021-09-10 10:50
閱讀 1371·2019-08-30 15:54
閱讀 3690·2019-08-29 17:02
閱讀 3472·2019-08-29 12:54
閱讀 2611·2019-08-27 10:57
閱讀 3316·2019-08-26 12:24