針對中小型 Oracle 單實例(< 50GB),無需購買備份軟件,利用 Windows 任務計劃 + exp 經典導出 + 批處理腳本,即可實現「按星期輪轉、保留 7 份、自動覆蓋」的輕量級備份策略。
oracle_daily_backup.bat@ECHO OFF
REM ========== 參數區 ==========
SET "TBUF=E:\OraBackup" REM 備份目錄(需預創建,預留足夠空間)
SET "DB_USER=scott" REM 導出用戶
SET "DB_PWD=tiger" REM 密碼
SET "DB_SID=ORCL" REM 連接標識
REM ==============================
REM 1. 取「星期幾」作為文件後綴(Mon/Tue/.../Sun)
FOR /F "tokens=2 delims==" %%I IN ('wmic os get localdatetime /value') DO SET DT=%%I
SET "DAY=%DT:~6,2%" REM 簡化:實際建議用 PowerShell Get-Date -Format ddd
REM 此處演示用固定映射,生產請替換為 PowerShell 獲取真實星期
IF "%DATE:~-3%"=="Mon" SET "DAY=Mon"
IF "%DATE:~-3%"=="Tue" SET "DAY=Tue"
IF "%DATE:~-3%"=="Wed" SET "DAY=Wed"
IF "%DATE:~-3%"=="Thu" SET "DAY=Thu"
IF "%DATE:~-3%"=="Fri" SET "DAY=Fri"
IF "%DATE:~-3%"=="Sat" SET "DAY=Sat"
IF "%DATE:~-3%"=="Sun" SET "DAY=Sun"
SET "FILENAME=ORCL_backup_%DAY%"
SET "DMP=%TBUF%\%FILENAME%.dmp"
SET "LOG=%TBUF%\%FILENAME%.log"
REM 2. 清理同名舊備份(實現 7 天輪轉)
IF EXIST "%DMP%" DEL /F /Q "%DMP%"
IF EXIST "%LOG%" DEL /F /Q "%LOG%"
REM 3. 執行導出
ECHO [%(DATE%) %(TIME%)] 開始導出 %FILENAME% ...
exp %DB_USER%/%DB_PWD%@%DB_SID% FILE="%DMP%" LOG="%LOG%" COMPRESS=Y CONSISTENT=Y BUFFER=10485760
IF %ERRORLEVEL% NEQ 0 (
ECHO [ERROR] 導出失敗,請檢查 %LOG%
EXIT /B 1
)
ECHO [%(DATE%) %(TIME%)] 導出成功:%DMP%
COMPRESS=Y:導出時合併 Extent,導入後表更緊湊(注意:目標表空間需足夠大)。CONSISTENT=Y:確保導出數據一致性(SCN 級),避免導出過程中 DML 導致不一致;大表會增加 Undo 壓力。BUFFER=10485760:10MB 緩衝區,減少網絡往返,提升導出吞吐。FILE/LOG:帶星期後綴,天然實現 7 份輪轉覆蓋。C:\Windows\System32\cmd.exe → 參數:/c "D:\Scripts\oracle_daily_backup.bat >> D:\Scripts\backup.log 2>&1"。impdp ... SQLFILE=verify.sql 或 RMAN VALIDATE BACKUPSET 驗證可用性。robocopy /MIR 或 Azure Blob / AWS S3 CLI 將 .dmp/.log 推送至異地。backup.log 關鍵字「EXP-00000」「ORA-」「successfully terminated」,對接 Zabbix/Prometheus 告警。EXP_FULL_DATABASE 役或 DBA 役(expdp 需 DATAPUMP_EXP_FULL_DATABASE)。這套「批處理 + 任務計劃」方案零授權成本、部署 10 分鐘上線,完美支撐中小型 Oracle 核心業務的「最後一道防線」。隨著數據增長,平滑遷移至 RMAN + Data Guard / GoldenGate 異地容灾架構即可。