Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux Shell 腳本自動清理 RMAN 備份檔案:保留 7 天策略實作

編輯:Linux 系統常見問題解答

需求背景

Oracle RMAN 備份產生大量檔案,需自動清理超過 7 天的舊備份,釋放磁碟空間。

備份腳本 (rman_backup.sh)

#!/bin/bash
su - oracle <

關鍵點:delete all input 備份完成後刪除已備份的歸檔日誌;delete noprompt obsolete 刪除過期備份 (依據保留策略)。

清理腳本 (clean_orabak.sh) - 保留最近 7 天

#!/bin/bash
BK_DIR="/orabak"
DAYS=7

for file in $(ls $BK_DIR); do
    # 檔名格式: db_XXXX_YYYYMMDD_XX 或 arch_XXXX_YYYYMMDD_XX
    if [[ ${file:0:2} == "db" ]]; then
        fdate=${file:10:8}   # 提取日期部分
    else
        fdate=${file:12:8}
    fi

    mydate=$(date +%Y%m%d -d "-$DAYS days")

    if [[ $fdate -lt $mydate ]]; then
        echo "Deleting expired backup: $file"
        rm -rf "$BK_DIR/$file"
    else
        echo "Keeping: $file"
    fi
done

排程執行 (crontab)

# 每天凌晨 2:30 執行清理
30 2 * * * /path/to/clean_orabak.sh >> /var/log/rman_clean.log 2>&1

腳本邏輯解析

步驟說明
遍歷目錄for file in $(ls $BK_DIR)
識別檔案類型以 db_ 或 arch_ 開頭判斷
提取日期根據前綴長度不同,db 從第 10 字元起 8 碼,arch 從第 12 字元起
計算閾值date +%Y%m%d -d "-7 days" 取得 7 天前日期
比較刪除檔案日期 < 閾值則刪除

改進建議

  • 使用 find 替代 ls 避免檔名含空格問題:find $BK_DIR -maxdepth 1 -type f -name 'db_*' -o -name 'arch_*'
  • 加入 set -euo pipefail 嚴格模式
  • 記錄刪除操作至日誌供稽核
  • 考慮使用 RMAN 內建 CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS 讓 RMAN 自行管理過期清理

RMAN 保留策略配置範例

RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
Copyright © Windows教程網 All Rights Reserved