人工備份必然遺漏,UNIX cron + Shell 腳本實現 Oracle exp 自動化備份,並建立本地磁碟 → 磁帶 → 異地主機三層防護。本文提供生產級腳本架構:環境初始化檔、備份主腳本、排程策略、擴充建議。
| 時間 | 任務 | 腳本 |
|---|---|---|
| 23:00 | exp 導出備份至本地磁碟 | ora-backup |
| 02:00 | 備份檔複製至磁帶 | tar-backup |
| 04:00 | 備份檔複製至異地 UNIX 主機 | rcp/scp 或 rsync |
檔名:ora-env(放置於 $ORACLE_HOME 或腳本目錄)
#!/bin/ksh
ORACLE_HOME=$ORACLE_HOME; export ORACLE_HOME
ORACLE_SID=ora73; export ORACLE_SID
ORACLE_TERM=sun; export ORACLE_TERM
LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
PATH=.:/usr/ccs/bin:/usr/ucb:$ORACLE_HOME/bin:$PATH; export PATH
DISPLAY=host1:0; export DISPLAY
NLS_LANG=american_america.zhs16cgb231280; export NLS_LANG
檔名:ora-backup
#!/bin/ksh
. ./ora-env # 載入環境變數
RQ=`date +%m%d` # 日期變數 MMDD
rm -f /backup/* # 清空備份目錄 (視保留策略調整)
exp test/test \
FILE=/backup/xx${RQ}.dmp \
LOG=/backup/xx${RQ}.log \
OWNER=test # 或 FULL=Y 視需求
# 可選:壓縮
# compress /backup/xx${RQ}.dmp
檔名:tar-backup
#!/bin/ksh
RQ=`date +%m%d`
# 複製至磁帶裝置 (假設 /dev/rmt/0)
tar -cvf /dev/rmt/0 /backup/xx${RQ}.dmp /backup/xx${RQ}.log
# 複製至異地主機 (需 SSH 金鑰免密)
scp /backup/xx${RQ}.dmp /backup/xx${RQ}.log remote_host:/remote/backup/
# oracle 用戶 crontab -e
0 23 * * * /home/oracle/scripts/ora-backup >> /home/oracle/logs/backup.log 2>&1
0 2 * * * /home/oracle/scripts/tar-backup >> /home/oracle/logs/tape.log 2>&1
0 4 * * * /home/oracle/scripts/remote-copy >> /home/oracle/logs/remote.log 2>&1
find /backup -mtime +7 -delete 保留 7 天,磁帶離線存放$?,失敗發郵件/簡訊告警imp SHOW=Y 驗證備份檔可讀性exp PARFILE=exp.par 管理複雜參數自動化備份 = 環境隔離 + 日期命名 + 分層複製 + 失敗告警 + 定期驗證。Shell 腳本雖樸素,穩定可靠;現代環境建議遷移至 RMAN + Data Guard 體系,但腳本化思維(冪等、可觀測、可恢復)永不過時。