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

Linux 環境 Oracle 資料庫增量備份 Shell 腳本實戰

     編輯:Oracle 資料庫相關知識

本文提供一套完整的 Oracle 資料庫備份策略與自動化 Shell 腳本,採用傳統 EXP/IMP 工具實現每日增量、每週累積、每週完整備份的循環輪換機制,適用於中小型資料庫環境。

備份策略設計

星期備份類型參數檔名範例
一完整備份inctype=complete2024-01-01-Mon-complete.dmp
二增量備份inctype=incremental2024-01-02-Tue-incremental.dmp
三增量備份inctype=incremental2024-01-03-Wed-incremental.dmp
四增量備份inctype=incremental2024-01-04-Thu-incremental.dmp
五累積備份inctype=cumulative2024-01-05-Fri-cumulative.dmp
六增量備份inctype=incremental2024-01-06-Sat-incremental.dmp
日增量備份inctype=incremental2024-01-07-Sun-incremental.dmp

核心概念釐清

  • 完整導出: 整個資料庫的基準線備份
  • 增量導出: 僅備份上一次「任意類型」導出後變更的資料
  • 累積導出: 備份自上次「完整導出」以來所有變更的資料(含增量內容),恢復時可跳過中間增量檔

災難恢復演練(假設週日資料庫損壞)

  1. 建立空資料庫結構
  2. imp userid=xxx inctype=RESTORE FULL=y FILE=f1.dmp(週一完整)
  3. imp userid=xxx inctype=RESTORE FULL=y FILE=f5.dmp(週五累積)
  4. imp userid=xxx inctype=RESTORE FULL=y FILE=f6.dmp(週六增量)

僅需三步即可恢復至週六狀態,累積備份大幅縮短恢復時間目標(RTO)。

自動化備份 Shell 腳本

#!/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 的受限環境。

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