利用 Windows 工作排程器、批次檔與 VBScript 封裝 exp 匯出工具,實現每日自動備份並保留最近兩代備份檔。方案輕量、無需額外軟體,適合中小型資料庫。
Oracle_backup/
├── backup/ # 當前備份
├── old_backup/ # 上一代備份
└── script/
├── exp.par # 參數檔
├── oracle_backup.bat # 主流程
└── oracle_backup.vbs # 呼叫 exp 的 VBScript
script/exp.paruserid=system/manager@ORCL
owner=SCOTT
indexes=y
grants=y
rows=y
constraints=y
compress=n
說明:userid 請依實際連線字串修改;owner 指定匯出結構;若需全庫備份改用 full=y。
script/oracle_backup.bat@echo off
rem === 保留策略:輪換兩代 ===
rem 1. 刪除舊備份
del /q ..\old_backup\*.*
rem 2. 將目前備份移至舊備份
copy ..\backup\*.* ..\old_backup\
rem 3. 清空目前備份目錄
del /q ..\backup\*.*
rem 4. 執行 VBScript 啟動 exp
cscript //nologo oracle_backup.vbs
rem 如需保留歷史所有備份,註解掉第 1、3 行
script/oracle_backup.vbsOption Explicit
On Error Resume Next
Dim fname, cmd, WshShell
Set WshShell = CreateObject("WScript.Shell")
fname = Year(Date) & Right("0" & Month(Date), 2) & Right("0" & Day(Date), 2)
cmd = "exp parfile=exp.par " & _
"log=../backup/" & fname & "_exp.log " & _
"file=../backup/" & fname & "_exp.dmp"
WshShell.Run cmd, 1, True ' 1=顯示視窗, True=等待完成
Set WshShell = Nothing
啟動程式 → C:\Oracle_backup\script\oracle_backup.bat7z a -tzip ..\backup\%fname%_exp.zip ..\backup\%fname%_exp.dmp 並刪除 .dmp。robocopy 將備份目錄鏡像至 NAS/異地伺服器。Err.Number,失敗時發送郵件(可呼叫 PowerShell Send-MailMessage)。expdp,支援並行、壓縮、網路模式,效能大幅優於 exp。| 現象 | 可能原因 | 對策 |
|---|---|---|
| 排程不執行 | 帳號無「以批次工作登入」權限 | 本機安全性原則 → 使用者權限指派 → 加入帳號 |
| exp 報 ORA-12541 | Listener 未啟動 | 檢查服務 OracleOraHome*TNSListener |
| 匯出檔為 0 KB | connect string 錯誤或權限不足 | 以相同帳號手動測試 exp 指令 |
此方案以原生 Windows 元件實現「零成本、可維護」的自動備份。隨著資料量增長,建議逐步遷移至 RMAN 增量備份 + Data Guard 異地容災,構建企業級資料保護體系。