利用 Windows 工作排程器或 Linux Cron,搭配 EXP/EXPDP 批次腳本,可實現零成本的 Oracle 定時備份。以下三個進階建議解決日期命名、壓縮保留、循環覆寫等實務痛點。
@echo off
REM 產生格式:Oracle2024-01-15.dmp / .log
exp system/manager file=d:\backup\Oracle\Oracle%date:~0,10%.dmp ^
owner=system log=d:\backup\Oracle\Oracle%date:~0,10%.log
%date:~0,10% 取前 10 字元 (YYYY-MM-DD),依系統區域設定可能需調整 (如 %date:~0,4%%date:~5,2%%date:~8,2% 組合成 YYYYMMDD)。echo %date% 確認格式。%time% 並處理前導空格。exp system/manager file=d:\backup\Oracle\Oracle%date:~0,3%.dmp ^
owner=system log=d:\backup\Oracle\Oracle%date:~0,3%.log
%date:~0,3% 取星期縮寫 (Mon/Tue...),自動循環覆寫,最多保留 7 天。@echo off
set filename=E:\data_bak\%date:~8,2%日
exp user/pass@esdata file=%filename%.dmp owner=user indexes=y grants=y constraints=y compress=y log=%filename%.log
rar a %filename%.rar %filename%.*
del %filename%.dmp
del %filename%.log
%date:~8,2%),月循環保留最多 31 份。rar a 壓縮 (需將 rar.exe 複製至 System32 或加入 PATH)。set filename=E:\data_bak\%date:~0,3%。@echo off
SET BACKPATH=D:\
REM 檢查目錄輪替狀態
IF EXIST %BACKPATH%\ONE GOTO ONE
IF EXIST %BACKPATH%\TWO GOTO TWO
...
IF EXIST %BACKPATH%\SEVEN GOTO SEVEN
ECHO E> %BACKPATH%\ONE
:ONE
SET BACKPATH_FULL=%BACKPATH%\ONE
REN %BACKPATH%\ONE TWO
GOTO BACK
:TWO
SET BACKPATH_FULL=%BACKPATH%\TWO
REN %BACKPATH%\TWO THREE
GOTO BACK
...
:SEVEN
SET BACKPATH_FULL=%BACKPATH%\SEVEN
REN %BACKPATH%\SEVEN ONE
GOTO BACK
:BACK
EXP TESTUSER/TEST FILE=%BACKPATH_FULL%.DMP
SET BACKPATH=
SET BACKPATH_FULL=
EXIT
ONE~SEVEN) 輪替,每天備份到對應目錄,自動覆寫 7 天前備份。IMPDP ... SQLFILE=verify.sql 或檢查 .log 關鍵字 successfully completed,失敗發送郵件告警。robocopy/rsync 複製至異地存儲/雲端。EXP_FULL_DATABASE/DATAPUMP_EXP_FULL_DATABASE 權限。將這三個建議整合進標準化備份框架,配合監控告警,即可構建零成本、高可靠的 Oracle 備份體系。