Oracle RMAN 備份產生大量檔案,需自動清理超過 7 天的舊備份,釋放磁碟空間。
#!/bin/bash
su - oracle <
關鍵點:delete all input 備份完成後刪除已備份的歸檔日誌;delete noprompt obsolete 刪除過期備份 (依據保留策略)。
#!/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
# 每天凌晨 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 嚴格模式CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS 讓 RMAN 自行管理過期清理RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;