首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 歸檔日誌自動清理 Shell 腳本

     編輯:Oracle 教學

Oracle 歸檔日誌自動清理 Shell 腳本

歸檔日誌若不定期清理將佔滿 FRA 或磁碟導致資料庫掛起。本文提供一個可直接部署的 Shell 腳本,搭配 RMAN 刪除過期歸檔與保留最近 3 天歸檔,並記錄日誌供稽核。

腳本內容 (clean_archivelog.sh)

#!/bin/sh
# 設定備份根目錄與日期格式
export BACK_DATE=$(date +%Y%m%d)
export BACKUP_PATH=/home/oracle/dbbak

# 建立當日歸檔日誌目錄
mkdir -p ${BACKUP_PATH}/archivelog/${BACK_DATE}

# RMAN 執行刪除
rman msglog=${BACKUP_PATH}/archivelog/${BACK_DATE}/arch_0_${BACK_DATE}.log << EOF
CONNECT TARGET /;
DELETE EXPIRED ARCHIVELOG ALL;
DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE - 3';
EXIT
EOF

部署步驟

  1. 存檔為 clean_archivelog.sh(建議放在 /home/oracle/scripts/)。
  2. 賦予執行權限:chmod 755 clean_archivelog.sh。
  3. 加入 crontab 定時執行(每天凌晨 2 點):
    0 2 * * * /home/oracle/scripts/clean_archivelog.sh

關鍵參數說明

參數說明
DELETE EXPIRED ARCHIVELOG ALL刪除控制檔/Recovery Catalog 中標記為 EXPIRED 的歸檔記錄(實體檔可能已手動刪除)。
DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE - 3'直接刪除 3 天前的歸檔(含實體檔與控制檔記錄),NOPROMPT 避免互動確認。
msglogRMAN 執行日誌輸出路徑,便事後追蹤。

進階擴充建議

  • 保留策略對齊:若 RMAN 設定 CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS,清理腳本天數應 ≤ 7 天,避免刪除仍需的歸檔。
  • FRA 監控:搭配 SELECT * FROM V$RECOVERY_FILE_DEST; 監控 FRA 使用率,超過 85% 發送告警。
  • 跨節點 RAC:在所有節點部署相同腳本,或使用集中式排程工具(如 Oracle Scheduler / Control-M)。

驗證清理結果

RMAN> LIST ARCHIVELOG ALL;
-- 確認最早歸檔序號 ≥ SYSDATE-3

SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE FIRST_TIME > SYSDATE-3;
-- 確認資料庫視圖中歸檔記錄同步刪除

部署此腳本並納入排程,即可自動化歸檔清理,避免磁碟爆滿風險。

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