將 Exp 匯出作業從生產庫卸載至專用備份機,可避免匯出過程佔用生產 CPU/記憶體/IO,並提供物理隔離的備份存儲。本文記錄一台 Oracle 10g 備份機的完整搭建流程:作業系統與網路配置、Oracle Client 安裝、TNS 設定、備份/清理腳本(VBScript/WSH)、Windows 排程器部署。
| 項目 | 規格 |
|---|---|
| 生產庫 | IP 129.1.9.90,SID=JMYBJS,Listener 1521 |
| 備份機 | IP 129.1.9.91,Windows Server,關閉防火牆 |
| Oracle 版本 | 10.1.0.5 (Client/Admin) |
| 備份目錄 | D:\backup\dmp (DMP檔)、D:\backup\log (日誌) |
| 保留策略 | 保留 30 天 |
# Windows 防火牆進階設定 → 入站規則 → 新增規則 → 連接埠 1521 TCP → 允許
# %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
sqlplus system/xxx@JMYBJS
檔案:D:\scripts\exp_full.vbs
' ============================================================
' 每日全量 Exp 備份腳本
' 輸出:D:\backup\dmp\JMYBJS_YYYYMMDD.dmp
' 日誌:D:\backup\log\JMYBJS_YYYYMMDD.log
' ============================================================
Option Explicit
Dim ws, outfile, aa, bb, C, stroption1, strsql, ret
Set ws = WScript.CreateObject("WScript.Shell")
' --- 日期字串 YYYYMMDD ---
C = CInt(Year(Date))
A = CInt(Month(Date))
B = CInt(Day(Date))
If A < 10 Then aa = "0" & A Else aa = CStr(A)
If B < 10 Then bb = "0" & B Else bb = CStr(B)
outfile = CStr(C) & aa & bb
' --- Exp 命令 ---
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
ret = ws.Run(strsql, 1, True) ' 1=顯示視窗, True=同步等待
If ret <> 0 Then
WScript.Echo "EXP FAILED with code " & ret
WScript.Quit ret
End If
WScript.Echo "EXP SUCCEEDED: " & outfile
BUFFER=900000:約 900KB 緩衝,視記憶體調大至 10M-50M。FULL=Y:全量匯出(需 SYSTEM 權限)。檔案:D:\scripts\cleanup_old.vbs
' ============================================================
' 清理 30 天前備份檔
' 需:C:\Windows\System32\delete.exe (Windows 2003/2008 內建無此工具)
' 可從 Windows Server 2003 Resource Kit 複製或用 del 命令替代
' ============================================================
Option Explicit
Dim ws, outfile, aa, bb, C, A, B, stroption1, strsql, ret
Set ws = WScript.CreateObject("WScript.Shell")
' --- 30 天前日期 ---
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" & A Else aa = CStr(A)
If B < 10 Then bb = "0" & B Else bb = CStr(B)
outfile = CStr(C) & aa & bb
' --- 刪除命令 (使用內建 DEL,避免依賴 delete.exe) ---
stroption1 = "CMD /C DEL /F /Q D:\backup\dmp\JMYBJS" & outfile & ".dmp"
strsql = stroption1
ret = ws.Run(strsql, 0, True) ' 0=隱藏視窗
If ret <> 0 Then
WScript.Echo "CLEANUP FAILED: " & ret
Else
WScript.Echo "CLEANUP OK: " & outfile
End If
改進點:原文使用 delete.exe 需額外複製;改用內建 DEL 命令零依賴。
C:\Windows\System32\wscript.exe,引數 D:\scripts\exp_full.vbs / D:\scripts\cleanup_old.vbs。D:\backup\log\ 下最新日誌。successfully terminated 或 EXP-00000 錯誤碼。Exp 邏輯備份有版本相容、效能、一致性限制。生產環境建議演進為:
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG 至備份機 NFS/共享目錄。CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 30 DAYS 自動清理。專用備份機將 Exp 負載與風險從生產庫剝離,配合標準化腳本、排程器、日誌監控,構成輕量可靠的邏輯備份體系。隨著業務增長,應規劃遷移至 RMAN 物理備份,獲得區塊級增量、壓縮、加密、即時恢復等企業級能力。