本文提供一套完整的 Oracle 資料庫備份策略與自動化 Shell 腳本,採用傳統 EXP/IMP 工具實現每日增量、每週累積、每週完整備份的循環輪換機制,適用於中小型資料庫環境。
| 星期 | 備份類型 | 參數 | 檔名範例 |
|---|---|---|---|
| 一 | 完整備份 | inctype=complete | 2024-01-01-Mon-complete.dmp |
| 二 | 增量備份 | inctype=incremental | 2024-01-02-Tue-incremental.dmp |
| 三 | 增量備份 | inctype=incremental | 2024-01-03-Wed-incremental.dmp |
| 四 | 增量備份 | inctype=incremental | 2024-01-04-Thu-incremental.dmp |
| 五 | 累積備份 | inctype=cumulative | 2024-01-05-Fri-cumulative.dmp |
| 六 | 增量備份 | inctype=incremental | 2024-01-06-Sat-incremental.dmp |
| 日 | 增量備份 | inctype=incremental | 2024-01-07-Sun-incremental.dmp |
imp userid=xxx inctype=RESTORE FULL=y FILE=f1.dmp(週一完整)imp userid=xxx inctype=RESTORE FULL=y FILE=f5.dmp(週五累積)imp userid=xxx inctype=RESTORE FULL=y FILE=f6.dmp(週六增量)僅需三步即可恢復至週六狀態,累積備份大幅縮短恢復時間目標(RTO)。
#!/bin/bash
# Oracle 增量備份自動化腳本
# 需預先設定 ORACLE_HOME、ORACLE_SID、PATH
BACKUP_DIR=/home/oracle/backups
[ ! -d "$BACKUP_DIR" ] && mkdir -p "$BACKUP_DIR"
DAYS=(Sun Mon Tue Wed Thu Fri Sat)
TYPES=(incremental complete incremental incremental incremental cumulative incremental)
DAY_NUM=$(date +%w) # 0=Sun ... 6=Sat
DAY_NAME=${DAYS[$DAY_NUM]}
TYPE=${TYPES[$DAY_NUM]}
DATE_NAME=$(date +%F) # YYYY-MM-DD
FILE_NAME="${DATE_NAME}-${DAY_NAME}-${TYPE}.dmp"
exp userid=xxx/xxx inctype=$TYPE file=${BACKUP_DIR}/${FILE_NAME} > /dev/null
gzip ${BACKUP_DIR}/${FILE_NAME}
# 保留 7 天,自動清理舊備份
find $BACKUP_DIR -mtime +7 -delete
/etc/cron.d/oracle_backup 或 crontab -e 設定每日固定時段執行ORACLE_HOME、ORACLE_SID、NLS_LANG 環境變數在 cron 環境中可用EXPDP/IMPDP(Data Pump)取代舊版 EXP/IMP,支援並行、壓縮、網路模式,效能提升數倍注意: Oracle 11g 起官方建議改用 RMAN 做塊級增量備份,
EXP/IMP已停止增強。本腳本適用於舊版本或無法使用 RMAN 的受限環境。