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

UNIX 環境下 Oracle 資料庫自動化備份腳本實戰:Export、磁帶、異地 FTP 全流程

     編輯:Oracle 資料庫基礎

備份策略規劃

時間任務說明
23:00Export 邏輯備份用戶模式導出 .dmp、.log 至 /backup
02:00磁帶備份tar 將 /backup 當日檔案寫入磁帶 (離線存儲)
04:00異地 FTP 傳輸自動上傳至遠端備份主機 /pub (異地容災)

一、環境變數初始化腳本 ora_env.sh

#!/bin/ksh
# ora_env.sh - Oracle 環境變數設定 (由其他腳本 source)

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=ORCL
export ORACLE_TERM=xterm
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export PATH=.:/usr/ccs/bin:/usr/ucb:$ORACLE_HOME/bin:$PATH
export DISPLAY=localhost:0
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

chmod 755 ora_env.sh

二、Export 備份腳本 ora_backup.sh

#!/bin/ksh
# ora_backup.sh - 每日 Export 備份

. $ORACLE_HOME/ora_env.sh

DATE_TAG=$(date +%m%d)           # 如 0112
BACKUP_DIR=/backup
EXP_USER=scott/tiger             # 實際建議用專用備份帳號 + 外部密碼檔
LOG_FILE=$BACKUP_DIR/exp_${DATE_TAG}.log
DMP_FILE=$BACKUP_DIR/exp_${DATE_TAG}.dmp

# 清理舊檔 (保留 7 天)
find $BACKUP_DIR -name "exp_*.dmp" -mtime +7 -exec rm {} \;
find $BACKUP_DIR -name "exp_*.log" -mtime +7 -exec rm {} \;

# 執行 Export (用戶模式)
exp $EXP_USER FILE=$DMP_FILE LOG=$LOG_FILE STATISTICS=NONE

# 檢查回傳碼
if [ $? -ne 0 ]; then
  echo "EXPORT FAILED at $(date)" | mail -s "Oracle Export Alert" dba@company.com
  exit 1
fi

echo "EXPORT SUCCESS at $(date)" >> $BACKUP_DIR/backup_history.log

chmod 755 ora_backup.sh

三、磁帶備份腳本 tar_backup.sh

#!/bin/ksh
# tar_backup.sh - 將 /backup 當日檔案寫入磁帶

. $ORACLE_HOME/ora_env.sh

TAPE_DEV=/dev/rmt/0n             # 不倒帶磁帶裝置
BACKUP_DIR=/backup

# 追加寫入 (-r)、顯示進度 (-v)、指定裝置 (-f)
tar -rvf $TAPE_DEV $BACKUP_DIR/exp_$(date +%m%d).dmp $BACKUP_DIR/exp_$(date +%m%d).log

if [ $? -ne 0 ]; then
  echo "TAR BACKUP FAILED at $(date)" | mail -s "Oracle Tape Backup Alert" dba@company.com
  exit 1
fi

echo "TAPE BACKUP SUCCESS at $(date)" >> $BACKUP_DIR/backup_history.log

參數說明:0n 表示第一台磁帶機、不倒帶;多檔案追加寫入時必須用 n 版裝置名。

四、異地 FTP 自動傳輸 .netrc + ftp_backup.sh

1. ~oracle/.netrc (權限 600)


machine backup-server.company.com
login oracle
password ********
macdef init
binary
lcd /backup
cd /pub
mput exp_$(date +%m%d).dmp exp_$(date +%m%d).log
bye

chmod 600 ~oracle/.netrc (僅擁有者讀寫,否則 FTP 拒絕使用)。

2. ftp_backup.sh

#!/bin/ksh
# ftp_backup.sh - 呼叫 FTP 自動執行 .netrc 巨集

. $ORACLE_HOME/ora_env.sh

# -i 關閉互動提示,-n 關閉自動登入 (改用 .netrc)
ftp -in backup-server.company.com <> /backup/backup_history.log

五、Crontab 排程部署

以 oracle 用戶登入,執行 crontab -e:


# 分 時 日 月 周 命令
0 23 * * * /u01/app/oracle/ora_backup.sh      > /dev/null 2>&1
0 2  * * * /u01/app/oracle/tar_backup.sh      > /dev/null 2>&1
0 4  * * * /u01/app/oracle/ftp_backup.sh      > /dev/null 2>&1

查看:crontab -l。

六、DBA 日常維護清單

  • 磁帶輪換:依備份大小與磁帶容量 (LTO-8 12TB 原始/30TB 壓縮) 規劃每日/每週/每月磁帶池,離站存放。
  • 備份驗證:每週抽樣 imp 還原至測試庫,驗證資料完整性。
  • 磁碟清理:/backup 保留 7 天,磁帶/FTP 確認成功後可手動刪除較舊檔案釋放空間。
  • 監控告警:腳本回傳碼非 0 即發郵件,建議整合至企業監控系統 (Zabbix, Prometheus, Oracle EM)。

現代化建議

  1. 邏輯備份 (Export) 僅適合小型資料庫/特定表。**生產核心庫請改用 RMAN 物理備份** (增量、塊追蹤、壓縮、加密)。
  2. 磁帶備份可改用 RMAN BACKUP DEVICE TYPE SBT 整合媒體管理層 (NetBackup, Tivoli, CommVault)。
  3. 異地傳輸建議 rsync over SSH 或專用複寫軟體,支援斷點續傳、加密、壓縮。
  4. 排程管理改用 systemd timer、Ansible、Oracle Scheduler (DBMS_SCHEDULER) 集中管控。

總結

本文提供傳統 UNIX Shell + Export + tar + FTP 的完整自動化備份落地方案,涵蓋環境初始化、日期命名、保留策略、錯誤告警、Crontab 部署。雖技術棧較舊,但邏輯清晰、零額外軟體依賴,適合舊版 Oracle (9i/10g/11g) 且無 RMAN/媒體管理條件的環境。

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