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

Oracle 9i Windows/Linux 自動備份腳本實戰:排程任務與日期變數應用

     編輯:Oracle 資料庫基礎

Windows 環境:任務排程器 + EXP 批次檔

步驟 1:準備備份目錄與工具

D:\BACKUP\          # 建立備份目錄
COPY EXP.EXE D:\BACKUP\  # 複製 exp.exe 至備份目錄 (或確保 PATH 包含 ORACLE_HOME\BIN)

步驟 2:建立備份批次檔 expbkup.bat

@ECHO OFF
REM 日期格式化:YYYY-MM-DD (地區設定相依,建議用 WMIC 或 PowerShell 穩健取得)
SET BACKUP_DATE=%DATE:~0,10%

REM 呼叫 EXP 匯出
EXP TEST/TEST@TEST FILE=D:\BACKUP\%BACKUP_DATE%.DMP LOG=D:\BACKUP\%BACKUP_DATE%.LOG ^
  COMPRESS=N BUFFER=8192 CONSISTENT=Y ^
  CONSTRAINTS=Y GRANTS=Y INDEXES=Y TRIGGERS=Y ROWS=Y ^
  FEEDBACK=10000 RECORD=Y DIRECT=N

REM 可選:壓縮備份檔
REM 7Z A D:\BACKUP\%BACKUP_DATE%.7Z D:\BACKUP\%BACKUP_DATE%.DMP
REM DEL D:\BACKUP\%BACKUP_DATE%.DMP
  • %DATE:~0,10%:截取前 10 字元 (視區域格式為 YYYY-MM-DD),不同地區設定結果不同
  • 建議改用 WMIC OS GET LOCALDATETIME 或 PowerShell 取得標準日期
  • CONSISTENT=Y:確保匯出集合一致性 (需 UNDO 空間足夠)
  • DIRECT=N:傳統路徑匯出 (Direct Path 在 9i 有已知 Bug)

步驟 3:建立 Windows 排程任務

  1. 控制台 → 任務排程 → 建立基本工作
  2. 觸發器:每天、開始時間 18:00
  3. 動作:啟動程式 → D:\BACKUP\EXPBKUP.BAT
  4. 執行帳號:具備 Oracle 客戶端環境與網路存取權限的服務帳號
  5. 勾選「不管使用者是否登入都要執行」、「使用最高權限執行」

Linux/Unix 環境:Crontab + Shell 腳本 + 日期變數

腳本 movedata1.sh

#!/bin/bash
# 載入 Oracle 環境
ORACLE_HOME=/opt/oracle/product/9.0.2
export ORACLE_HOME
. /opt/oracle/product/.bash_profile

# 取得標準日期格式 YYYYMMDD
DATE=$(date +%Y%m%d)
export DATE

# 執行多個 Schema 匯出
$ORACLE_HOME/bin/EXP GOLDRING/123456@SZDB \
  FILE=/DATA/ORACLEDB_BACKUP/GOLDRING.DMP \
  LOG=/DATA/ORACLEDB_BACKUP/LOGGOLDRING.DMP \
  CONSISTENT=YES

$ORACLE_HOME/bin/EXP JLTGAME/123456@SZDB \
  FILE=/DATA/ORACLEDB_BACKUP/JLTGAME$DATE.DMP \
  LOG=/DATA/ORACLEDB_BACKUP/LOGJLTGAME.DMP \
  CONSISTENT=YES

$ORACLE_HOME/bin/EXP USERID=ORACLEBACKUP/"ABCD456&*(@"@SZDB \
  OWNER=MOONPRINCESS \
  FILE=/DATA/ORACLEDB_BACKUP/MOONPRINCESS.DMP \
  LOG=/DATA/ORACLEDB_BACKUP/LOGMOONPRINCESS.DMP \
  CONSISTENT=YES

# 可選:FTP 傳送至異地備份伺服器
# FTP -n 10.0.0.3 < /OPT/ORACLE/PRODUCT/MOVEDATA/FTPCOMMAND

Crontab 配置

# 編輯 crontab
crontab -e

# 每天 18:00 執行
0 18 * * * /opt/oracle/product/movedata/movedata1.sh >> /var/log/oracle_exp.log 2>&1

關鍵技術細節:環境變數與日期變數

Windows 批次檔日期取得最佳實踐

REM 方法 1:WMIC (Win2000+、不受地區設定影響)
FOR /F "TOKENS=2 DELIMS==" %%A IN ('WMIC OS GET LOCALDATETIME /VALUE') DO SET DT=%%A
SET BACKUP_DATE=%DT:~0,4%-%DT:~4,2%-%DT:~6,2%

REM 方法 2:PowerShell (Win7/2008R2+)
FOR /F %%A IN ('POWERSHELL -COMMAND "GET-DATE -FORMAT \"YYYY-MM-DD\""') DO SET BACKUP_DATE=%%A

REM 方法 3:純批次檔 (需已知地區格式)
SET BACKUP_DATE=%DATE:~0,10%

Linux Shell 日期格式化

DATE=$(date +%Y%m%d)        # 20240709
DATE=$(date +%Y-%m-%d)      # 2024-07-09
DATE=$(date +%Y%m%d_%H%M%S) # 20240709_143000 (含時分秒)

環境變數載入關鍵點

  • Windows:排程任務執行帳號需具備 ORACLE_HOME、PATH、NLS_LANG 等環境變數,或在批次檔開頭 SET ORACLE_HOME=...、SET PATH=%ORACLE_HOME%\BIN;%PATH%
  • Linux:腳本開頭 source /home/oracle/.bash_profile 或 . /opt/oracle/product/.bash_profile 載入完整環境

進階增強:RMAN 取代 EXP (9i/10g+ 推薦)

# RMAN 備份腳本 rman_backup.sh
#!/bin/bash
ORACLE_HOME=/opt/oracle/product/9.0.2
export ORACLE_HOME
. $ORACLE_HOME/.bash_profile

DATE=$(date +%Y%m%d)
$ORACLE_HOME/bin/RMAN TARGET / << EOF
RUN {
  ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT '/DATA/RMAN_BACKUP/%d_%U_%T';
  BACKUP DATABASE PLUS ARCHIVELOG;
  BACKUP CURRENT CONTROLFILE FORMAT '/DATA/RMAN_BACKUP/CTL_%d_%T';
  DELETE NOPROMPT OBSOLETE;
  DELETE NOPROMPT EXPIRED BACKUP;
}
EOF
  • RMAN 支援增量備份、區塊壓縮、並行通道、自動過期清理
  • EXP 為邏輯備份,大資料量慢、無增量、難以時間點恢復
  • 生產環境強烈建議遷移至 RMAN

備份驗證與監控

  1. 日誌檢查:排程任務歷史、腳本輸出日誌、EXP/RMAN 回傳碼
  2. 檔案存在性與大小:每日檢查備份檔案是否生成、大小合理 (非 0 bytes)
  3. 定期恢復演練:季度在測試環境完整恢復驗證備份可用性
  4. 異地複製:備份檔案同步至異地儲存 (FTP、rsync、雲端儲存、磁帶)

總結

自動備份三要素:環境變數正確載入、日期變數標準化、驗證與異地複製機制。缺一不可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
環境排程工具日期變數關鍵推薦備份工具
Windows任務排程器WMIC/PowerShell 取得標準日期RMAN (9i+)、EXP (舊版相容)
Linux/UnixCrontabdate +%Y%m%dRMAN (標準)、Data Pump (10g+ 邏輯備份)