溫馨提示×

Linux環境Oracle如何備份

小樊
45
2025-10-01 19:17:51
欄目: 云計算

Linux環境下Oracle數據庫備份方法

一、邏輯備份(expdp/impdp)

邏輯備份通過Oracle Data Pump工具實現,將數據庫對象(表、視圖、存儲過程等)導出為邏輯格式(.dmp文件),適用于跨平臺遷移或選擇性恢復。
常用命令示例

  • 全庫邏輯備份expdp system/password@ORACLE_SID directory=DPUMP_DIR dumpfile=full_backup.dmp logfile=expdp_full.log full=y
    directory:需提前創建的邏輯目錄對象,對應Linux物理路徑;full=y:表示全庫備份)
  • 增量邏輯備份expdp system/password@ORACLE_SID directory=DPUMP_DIR dumpfile=inc_backup.dmp logfile=expdp_inc.log incremental=y
  • 恢復邏輯備份impdp system/password@ORACLE_SID directory=DPUMP_DIR dumpfile=full_backup.dmp logfile=impdp_restore.log full=y

注意事項

  • 執行前需確保Oracle Data Pump目錄對象已創建(create directory DPUMP_DIR as '/u01/app/oracle/dpump';);
  • 邏輯備份占用空間較大,恢復時間較長,適合小規模數據庫或需要遷移的場景。

二、物理備份(RMAN)

RMAN(Recovery Manager)是Oracle推薦的物理備份工具,支持全量備份、增量備份(Level 0/1)、歸檔日志備份,并能實現壓縮、加密、增量合并等功能,是生產環境首選。

1. 基礎備份命令

  • 全量備份(含歸檔日志)
    登錄RMAN:rman target /
    執行命令:BACKUP DATABASE PLUS ARCHIVELOG;
    PLUS ARCHIVELOG:備份數據庫后自動備份未歸檔的歸檔日志,確保備份一致性)
  • 增量備份(Level 1)
    BACKUP INCREMENTAL LEVEL 1 DATABASE;
    (Level 1增量備份基于最近的全量備份(Level 0)或增量備份(Level 1),僅備份變化的數據塊)

2. 高級備份配置(腳本示例)

全量備份腳本(full_backup.sh)

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.10.0/db_home
export ORACLE_SID=orcl
export BACKUP_DIR=/data/ora_backup
LOG_FILE=$BACKUP_DIR/rman_full_$(date +%Y%m%d).log

su - oracle -c "$ORACLE_HOME/bin/rman target / <<EOF > $LOG_FILE 2>&1
RUN {
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;  -- 保留7天內的備份
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
    BACKUP DATABASE PLUS ARCHIVELOG FORMAT '$BACKUP_DIR/full_%d_%T_%U.bak';
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    BACKUP ARCHIVELOG ALL DELETE INPUT;  -- 備份并刪除已備份的歸檔日志
    DELETE NOPROMPT OBSOLETE;  -- 刪除過期備份
    RELEASE CHANNEL c1;
}
EOF"

if grep -q "Finished backup" $LOG_FILE; then
    echo "Full backup succeeded: $LOG_FILE"
else
    echo "Full backup failed. Check log: $LOG_FILE"
fi

增量備份腳本(inc_backup.sh)

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.10.0/db_home
export ORACLE_SID=orcl
export BACKUP_DIR=/data/ora_backup
LOG_FILE=$BACKUP_DIR/rman_inc_$(date +%Y%m%d).log

su - oracle -c "$ORACLE_HOME/bin/rman target / <<EOF > $LOG_FILE 2>&1
RUN {
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
    BACKUP INCREMENTAL LEVEL 1 DATABASE FORMAT '$BACKUP_DIR/inc_%d_%T_%U.bak';
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    BACKUP ARCHIVELOG ALL DELETE INPUT;
    RELEASE CHANNEL c1;
}
EOF"

if grep -q "Finished backup" $LOG_FILE; then
    echo "Incremental backup succeeded: $LOG_FILE"
else
    echo "Incremental backup failed. Check log: $LOG_FILE"
fi

3. 自動化與維護

  • 定時任務:通過crontab -e添加定時任務,例如每天凌晨2點執行全量備份、8點執行增量備份:
    0 2 * * * /bin/bash /home/oracle/scripts/full_backup.sh
    0 8 * * * /bin/bash /home/oracle/scripts/inc_backup.sh
    
  • 保留策略:通過RMAN配置保留7天內的備份(CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;),自動刪除過期備份(DELETE NOPROMPT OBSOLETE;)。

三、物理冷備份(dd命令)

冷備份是在數據庫關閉狀態下,直接復制數據文件、控制文件、重做日志文件的物理備份,適用于災難恢復。
操作步驟

  1. 關閉數據庫:sqlplus / as sysdbaSHUTDOWN IMMEDIATE;
  2. 復制文件:
    cp -r /u01/app/oracle/oradata/orcl /backup/orcl_cold_$(date +%Y%m%d)
    
  3. 啟動數據庫:STARTUP;

注意事項

  • 冷備份無法實現增量備份,恢復時需停機;
  • 需確保備份目錄有足夠空間,且備份文件與原文件權限一致。

四、備份策略建議

  • 全量備份:每周日凌晨執行1次(保留2次全備);
  • 增量備份:周一至周六凌晨各執行1次(Level 1增量);
  • 歸檔日志備份:每次增量備份后備份歸檔日志(避免歸檔日志占滿磁盤);
  • 驗證備份:每月隨機選取1次備份進行恢復測試(RESTORE DATABASE; RECOVER DATABASE;)。

五、常見問題排查

  • 權限問題:確保執行備份的用戶(如oracle)對備份目錄有讀寫權限(chown -R oracle:oinstall /data/ora_backup);
  • 空間不足:通過df -h檢查備份目錄所在磁盤空間,及時清理過期備份;
  • 日志分析:若備份失敗,查看RMAN日志(如rman_full_20250930.log)定位錯誤(如通道分配失敗、文件無法訪問)。

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