利用廉價 Windows 主機作為 Oracle exp 邏輯備份機,成本低、維護簡單。本文以 Oracle 10.1 為例,完整記錄從客戶端安裝、網路配置、備份/清理腳本 (VBScript) 到排程部署的全過程。
| 角色 | IP | Oracle 版本 | 備註 |
|---|---|---|---|
| 生產資料庫 (Server) | 129.1.9.90 | 10.1.0.5 | 服務名 jmybJS |
| 備份機 (Client) | 129.1.9.91 | 10.1.0.5 (Client Only) | 關閉防火牆 |
編輯 $ORACLE_HOME/network/admin/tnsnames.ora:
JMYBJS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 129.1.9.90)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jmybJS)
)
)
測試連線:tnsping JMYBJS 確認通達。
D:\backup\dmp\ -- 存放 .dmp 檔案
D:\backup\log\ -- 存放備份日誌
檔名:exp_backup.vbs
' === 參數區 ===
Dim outfile, aa, bb, stroption1, strsql, ws
Set ws = WScript.CreateObject("WScript.Shell")
' 產生 YYYYMMDD 日期字串
Dim A, B, C
A = CInt(Month(DateAdd("d", 0, Date())))
B = CInt(Day(DateAdd("d", 0, Date())))
C = CInt(Year(DateAdd("d", 0, Date())))
If A < 10 Then aa = "0" & CStr(A) Else aa = CStr(A)
If B < 10 Then bb = "0" & CStr(B) Else bb = CStr(B)
outfile = CStr(C) & aa & bb ' 例:20240115
' === exp 命令組裝 ===
' 注意:system/****** 為密碼,實際部署請加密存放
stroption1 = "D:\Oracle_bf\product\10.1.0\Db_1\BIN\exp system/******@JMYBJS " & _
"FULL=Y BUFFER=900000 " & _
"FILE=D:\backup\dmp\jmybjs" & outfile & ".dmp " & _
"LOG=D:\backup\log\jmybjs" & outfile & ".log"
strsql = stroption1
ws.Run strsql, 1, True ' 同步執行,等待完成
' 可在此加入郵件通知、日誌分析等後續邏輯
| 參數 | 建議值 | 說明 |
|---|---|---|
| FULL | Y | 完整匯出 (需 EXP_FULL_DATABASE 權限) |
| BUFFER | 900000 | 緩衝區大小 (Bytes),提升大表匯出效能 |
| FILE | 含日期的完整路徑 | 自動分天存檔,便於保留策略 |
| LOG | 同目錄 .log | 記錄匯出過程、錯誤、統計資訊 |
檔名:exp_cleanup.vbs
' === 參數區 ===
Dim outfile, aa, bb, stroption1, strsql, ws
Set ws = WScript.CreateObject("WScript.Shell")
' 計算 30 天前日期
Dim A, B, C
A = CInt(Month(DateAdd("d", -30, Date())))
B = CInt(Day(DateAdd("d", -30, Date())))
C = CInt(Year(DateAdd("d", -30, Date())))
If A < 10 Then aa = "0" & CStr(A) Else aa = CStr(A)
If B < 10 Then bb = "0" & CStr(B) Else bb = CStr(B)
outfile = CStr(C) & aa & bb
' === 刪除命令 ===
' 注意:Windows 預設無 delete.exe,需從其他系統複製至 C:\Windows\System32\
stroption1 = "C:\Windows\System32\delete.exe D:\backup\dmp\jmybjs" & outfile & ".dmp"
strsql = stroption1
ws.Run strsql, 0, True ' 隱藏視窗執行
⚠ 實測坑點: Windows Server 2003/2008 預設
System32無delete.exe,需從同版本 OS 拷貝一份放入,否則腳本報「找不到檔案」。或改用cmd /c del ...純內建指令。
stroption1 = "cmd /c del /f /q D:\backup\dmp\jmybjs" & outfile & ".dmp"
wscript.exe D:\scripts\exp_backup.vbswscript.exe D:\scripts\exp_cleanup.vbsexp_backup.vbs 確認生成 .dmp + .logExport terminated successfully without warningsexp_cleanup.vbs 確認 30 天前 .dmp 被刪除imp 還原測試,驗證備份可用性.ini 或註冊表,避免硬編碼PARALLEL 參數 (需配合 Data Pump expdp),大幅縮短備份窗口以 Windows + exp 搭建備份機,門檻低、成本可控。核心在於:腳本參數化、日誌留存、自動清理、定期演練還原 四項機制落地。建議逐步遷移至 expdp + RMAN 組合策略,構建多層次備份體系。