溫馨提示×

Oracle在Ubuntu上如何實現自動備份

小樊
45
2025-10-12 09:36:53
欄目: 云計算

Oracle在Ubuntu上實現自動備份的步驟

1. 準備工作:配置Oracle環境變量

自動備份腳本需要訪問Oracle的環境變量(如ORACLE_HOME、ORACLE_SID),需先為Oracle用戶(通常為oracle)配置這些變量。
編輯Oracle用戶的~/.bash_profile文件(或~/.bashrc),添加以下內容(根據實際安裝路徑調整):

export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1  # Oracle安裝目錄
export ORACLE_SID=orcl                                   # 數據庫實例名
export PATH=$ORACLE_HOME/bin:$PATH                       # 將Oracle bin目錄加入PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8                # 設置字符集(可選)

保存后執行source ~/.bash_profile使變量生效。

2. 編寫自動備份腳本

選擇物理備份(RMAN)邏輯備份(expdp),以下提供兩種方案的腳本示例:

方案一:RMAN物理備份(推薦)

RMAN是Oracle官方推薦的物理備份工具,支持全量、增量備份及歸檔日志備份,恢復可靠性高。
創建腳本/home/oracle/scripts/rman_backup.sh,內容如下:

#!/bin/bash
# 設置備份目錄(需提前創建并授權)
BACKUP_DIR=/backup/oracle
mkdir -p $BACKUP_DIR
chown -R oracle:oinstall $BACKUP_DIR
chmod 700 $BACKUP_DIR

# 加載Oracle環境變量
source /home/oracle/.bash_profile

# 生成帶日期的備份文件名
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="$BACKUP_DIR/rman_backup_$DATE.log"
DUMP_FILE="$BACKUP_DIR/full_backup_$DATE.dmp"

# 執行RMAN備份(全量+歸檔日志)
rman target / <<EOF >> $LOG_FILE 2>&1
run {
    allocate channel ch1 type disk;
    backup database plus archivelog format '$BACKUP_DIR/full_%U.dmp';
    release channel ch1;
}
exit;
EOF

# 檢查備份是否成功
if [ $? -eq 0 ]; then
    echo "RMAN備份成功,日志文件:$LOG_FILE" | mail -s "Oracle RMAN Backup Success" admin@example.com  # 可選:發送郵件通知
else
    echo "RMAN備份失敗,請檢查日志:$LOG_FILE" | mail -s "Oracle RMAN Backup Failed" admin@example.com  # 可選:發送郵件通知
fi

說明

  • backup database plus archivelog:備份數據庫及歸檔日志(需數據庫處于歸檔模式,可通過SQL> archive log list確認);
  • 日志文件會記錄備份詳情,便于排查問題;
  • 可通過mail命令發送通知(需安裝mailutils包)。
方案二:expdp邏輯備份

expdp是Oracle的邏輯備份工具,適合導出特定schema或表,備份文件為二進制格式(.dmp)。
創建腳本/home/oracle/scripts/expdp_backup.sh,內容如下:

#!/bin/bash
# 設置備份目錄(需提前在Oracle中創建DIRECTORY對象)
BACKUP_DIR=/backup/oracle/expdp
mkdir -p $BACKUP_DIR
chown -R oracle:oinstall $BACKUP_DIR
chmod 700 $BACKUP_DIR

# 加載Oracle環境變量
source /home/oracle/.bash_profile

# 生成帶日期的備份文件名
DATE=$(date +%Y%m%d)
DUMP_FILE="$BACKUP_DIR/expdp_$DATE.dmp"
LOG_FILE="$BACKUP_DIR/expdp_$DATE.log"

# 執行expdp備份(全庫導出)
expdp system/password@orcl schemas=SCOTT directory=DATA_PUMP_DIR dumpfile=$DUMP_FILE logfile=$LOG_FILE parallel=4

# 清理7天前的舊備份(避免占用過多空間)
find $BACKUP_DIR -name "expdp_*.dmp" -mtime +7 -exec rm -f {} \;
find $BACKUP_DIR -name "expdp_*.log" -mtime +7 -exec rm -f {} \;

說明

  • directory=DATA_PUMP_DIR:需提前在Oracle中創建(SQL> create directory DATA_PUMP_DIR as '/backup/oracle/expdp';);
  • parallel=4:并行導出提高速度(根據服務器性能調整);
  • find命令:自動清理7天前的舊備份,節省存儲空間。

3. 設置腳本執行權限

備份腳本需具備可執行權限,執行以下命令:

chmod +x /home/oracle/scripts/rman_backup.sh
chmod +x /home/oracle/scripts/expdp_backup.sh

4. 配置cron定時任務

使用crontab設置定時任務,讓腳本定期自動執行。
編輯Oracle用戶的cron表:

crontab -e

添加以下內容(以每天凌晨2點執行RMAN備份為例):

# 每天凌晨2點執行RMAN備份
0 2 * * * /home/oracle/scripts/rman_backup.sh

# 每周六凌晨3點執行expdp邏輯備份(可選)
0 3 * * 6 /home/oracle/scripts/expdp_backup.sh

說明

  • 0 2 * * *:表示每天凌晨2點執行;
  • * * * * *分別代表分鐘、小時、日、月、星期(0-6,0為周日);
  • 可根據需求調整執行頻率(如每小時、每周等)。

5. 驗證備份與監控

  • 手動測試腳本:執行/home/oracle/scripts/rman_backup.sh,檢查備份目錄是否生成.dmp文件及日志文件;
  • 查看cron日志:通過grep CRON /var/log/syslog查看cron任務執行記錄,確認定時任務是否正常運行;
  • 驗證備份完整性:定期測試備份文件的恢復(如用rman target / restore database驗證RMAN備份)。

注意事項

  • 歸檔模式:RMAN備份要求數據庫處于歸檔模式,可通過SQL> alter system set log_archive_dest_1='location=/u01/archivelog';設置歸檔路徑;
  • 存儲空間:定期清理舊備份(如腳本中的find命令),避免磁盤空間耗盡;
  • 權限問題:確保Oracle用戶對備份目錄有讀寫權限(chown -R oracle:oinstall /backup/oracle);
  • 備份策略:根據業務需求制定合理的備份策略(如全量+增量、每周全量+每日增量),并測試恢復流程。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女