首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

手把手教你搭建 Oracle exp 專用備份機 (Windows 環境)

     編輯:Oracle 資料庫基礎

前言

利用廉價 Windows 主機作為 Oracle exp 邏輯備份機,成本低、維護簡單。本文以 Oracle 10.1 為例,完整記錄從客戶端安裝、網路配置、備份/清理腳本 (VBScript) 到排程部署的全過程。

一、架構規劃

角色IPOracle 版本備註
生產資料庫 (Server)129.1.9.9010.1.0.5服務名 jmybJS
備份機 (Client)129.1.9.9110.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\   -- 存放備份日誌

四、自動化備份腳本 (VBScript)

檔名: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  ' 同步執行,等待完成

' 可在此加入郵件通知、日誌分析等後續邏輯

關鍵參數說明

參數建議值說明
FULLY完整匯出 (需 EXP_FULL_DATABASE 權限)
BUFFER900000緩衝區大小 (Bytes),提升大表匯出效能
FILE含日期的完整路徑自動分天存檔,便於保留策略
LOG同目錄 .log記錄匯出過程、錯誤、統計資訊

五、自動清理腳本 (保留 30 天)

檔名: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"

六、Windows 排程器部署

  1. 開啟 控制台 → 管理工具 → 工作排程器
  2. 建立基本任務:
    備份任務: 每天 01:00 執行 wscript.exe D:\scripts\exp_backup.vbs
    清理任務: 每天 03:00 執行 wscript.exe D:\scripts\exp_cleanup.vbs
  3. 設定「使用最高權限執行」,指定服務帳號 (需具備讀寫 D:\backup 權限)
  4. 啟用「如果任務失敗,每 10 分鐘重試 3 次」

七、驗證與監控清單

  • [ ] 手動執行 exp_backup.vbs 確認生成 .dmp + .log
  • [ ] 檢查 .log 尾部出現 Export terminated successfully without warnings
  • [ ] 手動執行 exp_cleanup.vbs 確認 30 天前 .dmp 被刪除
  • [ ] 排程運行後隔日檢查任務歷程記錄 (事件檢視器 → Applications and Services Logs → Microsoft → Windows → TaskScheduler)
  • [ ] 定期抽樣 imp 還原測試,驗證備份可用性

八、進階優化建議

  1. 參數化腳本: 將連線字串、路徑、保留天數寫入外部 .ini 或註冊表,避免硬編碼
  2. 加密密碼: 使用 Windows Credential Manager 或 PowerShell SecureString 存儲 system 密碼
  3. 並行匯出: 10g+ 支援 PARALLEL 參數 (需配合 Data Pump expdp),大幅縮短備份窗口
  4. 異地備份: 配合 Robocopy / rsync 將 .dmp 推送至異地存儲

九、結語

以 Windows + exp 搭建備份機,門檻低、成本可控。核心在於:腳本參數化、日誌留存、自動清理、定期演練還原 四項機制落地。建議逐步遷移至 expdp + RMAN 組合策略,構建多層次備份體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved