exp 匯出指定 Schema@echo off
REM === 設定變數 ===
SET ORACLE_SID=orcl
SET BAK_ROOT=D:\backup
SET DMP_DIR=%BAK_ROOT%\dbbak
SET RAR_DIR=%BAK_ROOT%\rarbak
SET LOG_FILE=%BAK_ROOT%\backup.log
SET FTP_IP=59.208.8.4
SET FTP_USER=ycoa
SET FTP_PASS=bester@2010
SET FTP_DIR=server3
REM === 開始備份 ===
ECHO 開始備份 %DATE% %TIME% >> %LOG_FILE%
REM 1. 匯出 Schema (dbhg, oa)
exp dbhg/dbhg@orcl FILE=%DMP_DIR%\dbhg_%DATE:~0,10%.dmp LOG=%DMP_DIR%\dbhg_%DATE:~0,10%.log ...
exp oa/oa@orcl FILE=%DMP_DIR%\oa_%DATE:~0,10%.dmp LOG=%DMP_DIR%\oa_%DATE:~0,10%.log ...
REM 2. 壓縮
"C:\Program Files\WinRAR\WinRAR.exe" a %RAR_DIR%\dbhg_%DATE:~0,10%.rar %DMP_DIR%\dbhg_%DATE:~0,10%.dmp %DMP_DIR%\dbhg_%DATE:~0,10%.log
"C:\Program Files\WinRAR\WinRAR.exe" a %RAR_DIR%\oa_%DATE:~0,10%.rar %DMP_DIR%\oa_%DATE:~0,10%.dmp %DMP_DIR%\oa_%DATE:~0,10%.log
REM 3. 刪除暫存匯出檔
DEL /F %DMP_DIR%\dbhg_%DATE:~0,10%.dmp %DMP_DIR%\dbhg_%DATE:~0,10%.log
DEL /F %DMP_DIR%\oa_%DATE:~0,10%.dmp %DMP_DIR%\oa_%DATE:~0,10%.log
REM 4. 計算 7 天前日期 (透過 VBScript)
ECHO WSCRIPT.ECHO DATEADD("D",-7,DATE) > %TMP%\tmp.vbs
FOR /F "TOKENS=1,2,3 DELIMS=/- " %%I IN ('CSCRIPT /NOLOGO %TMP%\tmp.vbs') DO SET Y=%%I
FOR /F "TOKENS=1,2,3 DELIMS=/- " %%I IN ('CSCRIPT /NOLOGO %TMP%\tmp.vbs') DO SET M=%%J
FOR /F "TOKENS=1,2,3 DELIMS=/- " %%I IN ('CSCRIPT /NOLOGO %TMP%\tmp.vbs') DO SET D=%%K
IF %M% LSS 10 SET M=0%M%
IF %D% LSS 10 SET D=0%D%
SET DEL_DATE=%Y%-%M%-%D%
REM 5. 刪除本地 7 天前壓縮檔
DEL /F %RAR_DIR%\dbhg_%DEL_DATE%.rar
DEL /F %RAR_DIR%\oa_%DEL_DATE%.rar
REM 6. 產生 FTP 指令檔並上傳
ECHO OPEN %FTP_IP% > FTP.TMP
ECHO USER %FTP_USER% %FTP_PASS% >> FTP.TMP
ECHO CD %FTP_DIR% >> FTP.TMP
ECHO BIN >> FTP.TMP
ECHO PROMPT OFF >> FTP.TMP
ECHO SEND %RAR_DIR%\dbhg_%DATE:~0,10%.rar >> FTP.TMP
ECHO DELETE dbhg_%DEL_DATE%.rar >> FTP.TMP
ECHO SEND %RAR_DIR%\oa_%DATE:~0,10%.rar >> FTP.TMP
ECHO DELETE oa_%DEL_DATE%.rar >> FTP.TMP
ECHO BYE >> FTP.TMP
FTP -N -S:FTP.TMP
DEL FTP.TMP
ECHO 結束備份 %DATE% %TIME% >> %LOG_FILE%
使用 Windows 工作排程器設定每日固定時間執行 backup.bat,建議在業務低峰期(如凌晨 01:00)執行。