首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle EXP 邏輯備份腳本自動化實戰 (Windows 定時任務)

     編輯:Oracle 資料庫相關知識

架構概覽

  • 來源端:生產資料庫 (TNS 別名 `JMYBJS`)
  • 備份端:獨立 Windows 機器,執行 VBScript 定時呼叫 `exp.exe`
  • 保留策略:保留 30 天 `.dmp` 及 `.log`

1. TNS 連線字串配置 (tnsnames.ora)

JMYBJS =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 129.1.9.90)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = jmybjs)
    )
  )

2. 目錄結構

D:\backup\dmp\   -- 存放 .dmp
D:\backup\log\   -- 存放 .log

3. 備份腳本 (backup.vbs)

' Nightly full export for JMYBJS
' 輸出檔名格式:jmybjsYYYYMMDD.dmp / .log

Dim outfile, aa, bb, stroption1, strsql
Set ws = WScript.CreateObject("WScript.Shell")

' 取得今日日期字串
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" & A Else aa = CStr(A)
If B < 10 Then bb = "0" & B Else bb = CStr(B)

outfile = CStr(C) & aa & bb  ' 例:20170109

' 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 & " " & _
             "log=D:\backup\log\jmybjs" & outfile & ".log"

strsql = stroption1
ret = ws.Run(strsql, 0, True)  ' 同步執行,等待完成

' 檢查返回碼
If ret <> 0 Then
  ' 可加入事件日誌或郵件通知
  WScript.Echo "Export failed with code: " & ret
End If

4. 清理腳本 (cleanup.vbs) - 刪除 30 天前檔案

' 刪除 30 天前的 .dmp
Dim outfile, aa, bb, stroption1, strsql
Set ws = WScript.CreateObject("WScript.Shell")

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

' 注意:需確保 C:\WINDOWS\system32\delete.exe 存在
' 若無,可從其他 Windows 機複製或改用 DEL 命令
stroption1 = "C:\WINDOWS\system32\delete.exe D:\backup\dmp\jmybjs" & outfile & ".dmp"

strsql = stroption1
ret = ws.Run(strsql, 0, True)

' 同步刪除對應 .log
stroption1 = "C:\WINDOWS\system32\delete.exe D:\backup\log\jmybjs" & outfile & ".log"
ret = ws.Run(strsql, 0, True)

改良版:純 VBScript 刪除 (無需 delete.exe)

Dim fso, folder, file, cutoffDate
Set fso = CreateObject("Scripting.FileSystemObject")
cutoffDate = DateAdd("d", -30, Date())

' 清理 .dmp
Set folder = fso.GetFolder("D:\backup\dmp")
For Each file In folder.Files
  If LCase(fso.GetExtensionName(file.Name)) = "dmp" Then
    If file.DateLastModified < cutoffDate Then
      file.Delete True
    End If
  End If
Next

' 清理 .log
Set folder = fso.GetFolder("D:\backup\log")
For Each file In folder.Files
  If LCase(fso.GetExtensionName(file.Name)) = "log" Then
    If file.DateLastModified < cutoffDate Then
      file.Delete True
    End If
  End If
Next

5. Windows 任務排程器配置

  1. 開啟「任務排程器」 → 建立基本任務
  2. 觸發器:每日 02:00 (離峰時段)
  3. 動作:啟動程式
    • 程式:`wscript.exe`
    • 引數:`D:\scripts\backup.vbs`
    • 起始於:`D:\scripts\`
  4. 建立第二個任務執行 `cleanup.vbs` (可同時間或稍後)
  5. 勾選「使用最高權限執行」並設定「無論使用者是否登入都要執行」

關鍵參數說明

參數說明建議值
full=y完整資料庫匯出生產庫建議
buffer=900000資料緩衝區大小 (bytes)大表可調大至 10M+
compress=n不壓縮儲存 (避免匯入問題)n
grants=y匯出授權y
indexes=y匯出索引定義y
constraints=y匯出約束定義y

驗證與監控

  • 每日檢查 `D:\backup\log\jmybjsYYYYMMDD.log` 確認 `Export terminated successfully without warnings.`
  • 定期執行 `imp ... show=y` 測試匯入可行性 (演練恢復)。
  • 監控磁碟空間,設定閾值告警。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved