失敗)
asm磁盤組arch告警使用率90%經(jīng)檢查歸檔刪除腳本未注釋操作系統(tǒng)日志無異常進入磁盤組檢查發(fā)現(xiàn)歸檔未正常刪除手工運行歸檔刪除腳本報錯如下分析歸檔刪除腳本發(fā)現(xiàn)delete expired archivelog all未添加noprompt而且/dev/null 2/tmp/b.log 會無法記錄日志--歸檔日志自動刪除腳本crontab -e0 0 * * * sh /u01/script/del_arch.sh /dev/null 2/tmp/b.log----主庫mkdir -p /u01/scriptcd /u01/scriptvi del_arch.shsource /home/oracle/.bash_profilerman target / !crosscheck archivelog all;delete expired archivelog all;delete noprompt archivelog all completed before sysdate-2;exit;!修復后的完整歸檔刪除腳本針對上述問題修復后的完整腳本示例如下已添加noprompt參數(shù)并修正輸出重定向同時補充注釋說明各部分作用#!/bin/bash # # 歸檔日志自動刪除腳本修復版 # 功能定期清理過期歸檔日志防止 ASM 磁盤組使用率過高 # 加載 Oracle 環(huán)境變量必須否則 rman 無法連接 source /home/oracle/.bash_profile 進入 RMAN 交互模式通過 here-document 傳入命令 rman target / ! 交叉檢查歸檔日志將物理上已不存在的歸檔標記為 expired crosscheck archivelog all; 刪除已過期expired的歸檔日志 關(guān)鍵修復添加 noprompt避免 RMAN 等待交互確認導致腳本卡住 delete noprompt expired archivelog all; 刪除 2 天前已完成的歸檔日志同樣使用 noprompt 避免交互等待 delete noprompt archivelog all completed before sysdate-2; 退出 RMAN exit; ! 腳本執(zhí)行結(jié)束輸出完成提示 echo 歸檔日志清理完成$(date %Y-%m-%d %H:%M:%S)對應(yīng)的 crontab 配置建議如下將標準輸出和錯誤輸出都重定向到日志文件確保所有執(zhí)行信息都能被記錄# 每天凌晨 0 點執(zhí)行歸檔刪除腳本 # 修復使用 追加標準輸出21 將錯誤輸出合并到同一日志文件 0 0 * * * sh /u01/script/del_arch.sh /tmp/b.log 21總結(jié)與建議本次問題的根本原因是歸檔刪除腳本中delete expired archivelog all未添加noprompt參數(shù)。在 RMAN 交互式執(zhí)行時該命令會等待用戶確認而腳本通過 crontab 定時運行時沒有交互終端導致命令一直處于等待狀態(tài)歸檔日志無法正常刪除最終引發(fā) ASM 磁盤組使用率告警。此外腳本中/dev/null 2/tmp/b.log的輸出重定向也存在隱患標準輸出被丟棄錯誤輸出追加到日志文件但 RMAN 的提示信息通常輸出到標準輸出因此即使腳本卡住日志中也無法記錄到相關(guān)提示增加了問題排查的難度。為避免類似問題再次發(fā)生建議采取以下預防措施為刪除命令添加 noprompt將delete expired archivelog all修改為delete noprompt expired archivelog all避免 RMAN 等待交互確認。定期檢查腳本日志建議每周至少檢查一次/tmp/b.log日志文件確認歸檔刪除任務(wù)是否正常執(zhí)行完畢及時發(fā)現(xiàn)異常。設(shè)置告警閾值為 ASM 磁盤組使用率設(shè)置合理的告警閾值如 80% 預警、90% 嚴重告警在磁盤空間耗盡前提前介入處理。確保 crontab 輸出重定向正確建議將標準輸出和錯誤輸出都重定向到日志文件例如0 0 * * * sh /u01/script/del_arch.sh /tmp/b.log 21確保所有輸出都能被記錄便于問題回溯。增加腳本執(zhí)行狀態(tài)檢查可在腳本末尾增加退出碼檢查或發(fā)送執(zhí)行結(jié)果通知確保每次執(zhí)行都有明確的結(jié)果反饋。