在 Windows Server 上利用批次檔 (.bat) 搭配工作排程器,實現 Oracle exp 每日自動完整備份,並自動清理 10 天前的備份檔與日誌。
oraclebackup.batE:\oraclebackup\
├─ dmp\ # 匯出檔存放
├─ log\ # 日誌存放
└─ exp.exe # 從 $ORACLE_HOME\bin 複製至此
oraclebackup.bat 內容:@echo off
REM ===== 設定區 =====
SET ORACLE_SID=orcl
SET EXP_USER=system
SET EXP_PASS=password
SET BACKUP_ROOT=E:\oraclebackup
SET DMP_DIR=%BACKUP_ROOT%\dmp
SET LOG_DIR=%BACKUP_ROOT%\log
SET RETENTION_DAYS=10
REM ===== 執行區 =====
echo 刪除 %RETENTION_DAYS% 天前的備份檔與日誌...
forfiles /p "%DMP_DIR%" /m *.dmp /d -%RETENTION_DAYS% /c "cmd /c del @path"
forfiles /p "%LOG_DIR%" /m *.log /d -%RETENTION_DAYS% /c "cmd /c del @path"
echo 正在備份 Oracle 資料庫,請稍候...
SET DATE_STR=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
"%BACKUP_ROOT%\exp.exe" %EXP_USER%/%EXP_PASS%@%ORACLE_SID% ^
FILE=%DMP_DIR%\OA_%DATE_STR%.dmp ^
LOG=%LOG_DIR%\OA_%DATE_STR%.log ^
OWNER=(jasoa_doc)
echo 任務完成!
| 指令 | 用途 |
|---|---|
| forfiles | Windows 內建依日期刪除檔案,/d -10 表示 10 天前 |
| %DATE:~0,4% | 擷取年份 (YYYY),格式視系統地區設定而定 |
| OWNER=(jasoa_doc) | 僅匯出指定 Schema,減少檔案體積 |
| ^ | 批次檔換行續行符號 |
E:\oraclebackup\oraclebackup.bat。.bat 測試執行,檢查 dmp/、log/ 產出。exp 日誌確認無 EXP-000xx 錯誤。imp 還原驗證備份可用性。expdp + DBMS_SCHEDULER 內建排程,功能更強。orapwd) 或 exp parfile= 參數檔(權限 600)。robocopy 或雲端同步工具將 .dmp 複製至異地。