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

搭建 Oracle Exp 備份機實戰:安裝、網路、腳本、定時清理全流程

     編輯:Oracle 資料庫基礎

前言:專用備份機是資料保護的基石

將 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 天

二、網路與 Client 設定

1. 關閉防火牆 / 開放 1521

# Windows 防火牆進階設定 → 入站規則 → 新增規則 → 連接埠 1521 TCP → 允許

2. 修改 tnsnames.ora

# %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)
    )
  )

3. 測試連線

tnsping JMYBJS
sqlplus system/xxx@JMYBJS

三、備份腳本:每日全量 Exp (VBScript + WSH)

檔案: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 權限)。
  • 密碼在腳本中明文,生產環境建議改用 Oracle Wallet 或環境變數。

四、清理腳本:刪除 30 天前備份

檔案: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 命令零依賴。

五、Windows 排程器部署

  1. 開啟「工作排程器」→ 建立基本任務。
  2. 觸發條件:每日 01:00(備份)、每日 02:00(清理)。
  3. 動作:啟動程式 C:\Windows\System32\wscript.exe,引數 D:\scripts\exp_full.vbs / D:\scripts\cleanup_old.vbs。
  4. 設定:「無論使用者是否登入都要執行」、「使用最高權限執行」。
  5. 測試:右鍵「執行」,檢查 D:\backup\log\ 下最新日誌。

六、監控與告警

  • 日誌掃描:每日腳本檢查最新 .log 是否含 successfully terminated 或 EXP-00000 錯誤碼。
  • 檔案大小檢查:DMP 檔大小驟降(如 < 10% 平常)觸發告警,疑似匯出不全。
  • 磁碟空間:備份盤使用率 > 80% 觸發清理/擴容告警。

七、進階:改用 RMAN + 備份機

Exp 邏輯備份有版本相容、效能、一致性限制。生產環境建議演進為:

  • 備份機安裝 Oracle Database (同版本) 做 RMAN 目標備份。
  • 使用 BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG 至備份機 NFS/共享目錄。
  • 配合 CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 30 DAYS 自動清理。

結語

專用備份機將 Exp 負載與風險從生產庫剝離,配合標準化腳本、排程器、日誌監控,構成輕量可靠的邏輯備份體系。隨著業務增長,應規劃遷移至 RMAN 物理備份,獲得區塊級增量、壓縮、加密、即時恢復等企業級能力。

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