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

Linux 自動備份 Oracle 資料庫完整實作:Shell 腳本 + Crontab 排程

     編輯:Oracle 資料庫相關知識

背景動機

曾有同事誤在正式庫刪除資料,雖 Oracle 有閃回/備份機制,但無法 100% 復原。定期自動備份是資料庫生存底線。

步驟一:建立備份 Shell 腳本 orabak.sh

#!/bin/bash
# ===== 參數區 =====
FILEPATH=/oracle/orabak                    # 備份根目錄
FILENAME=$(date +%Y%m%d_%H%M)              # 檔名含時間戳
ORACLE_SID=orcl
ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID ORACLE_HOME
export PATH=$ORACLE_HOME/bin:$PATH
USER=oracle

# ===== 建立當日備份資料夾 =====
cd $FILEPATH
mkdir -p $FILENAME
chmod 775 $FILENAME

# ===== 匯出資料庫 (exp 傳統模式,可改 expdp) =====
exp scott/tiger@orcl file="$FILEPATH/$FILENAME.dmp" log="$FILEPATH/$FILENAME.log" owner=scott rows=y

# ===== 打包壓縮 =====
cd $FILEPATH
tar -cf $FILENAME.tar $FILENAME
rm -rf $FILENAME
gzip $FILENAME.tar

exit 0

關鍵點:

  • 環境變數 ORACLE_SID、ORACLE_HOME、PATH **必須在腳本內 export**,crontab 執行環境極簡。
  • exp 參數:owner=scott 僅備份特定 Schema;生產環境建議改用 expdp 平行加速。
  • 打包流程:tar 歸檔 → rm 原資料夾 → gzip 壓縮,節省空間。

步驟二:配置 Crontab 自動排程

# 編輯 oracle 使用者的 crontab
crontab -e

# 每天 12:10 執行備份
10 12 * * * sh /oracle/orabak/orabak.sh >> /oracle/orabak/cron.log 2>&1

Crontab 時間欄位速查

分 時 日 月 週  指令
*  *  *  *  *  command
-  -  -  -  -
|  |  |  |  └─ 週 (0-7) (0/7=週日)
|  |  |  └──── 月 (1-12)
|  |  └────── 日 (1-31)
|  └──────── 時 (0-23)
└────────── 分 (0-59)

常用符號:* (所有)、1-5 (範圍)、1,3,5 (列舉)、*/10 (每 10 分鐘)。

進階建議

  • 保留策略:在腳本尾端加入 find $FILEPATH -name "*.tar.gz" -mtime +7 -delete 自動清理 7 天前備份。
  • 異地備份:搭配 rsync / scp 推送至遠端備份伺服器。
  • 驗證機制:定期抽樣 impdp 還原測試,確保備份可用。
  • 大型資料庫:改用 RMAN 增量備份 + 封存日誌,支援時間點復原 (PITR)。

總結

orabak.sh + crontab 即可落實「每日自動備份、打包壓縮、自動清理」。腳本簡單可靠,適合中小型 Oracle 資料庫;大型系統建議升級 RMAN + Data Guard 架構。

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