DBA 日常維護中,清理 $ORACLE_BASE/admin/SID/bdump、udump 目錄下積累的海量 .trc、.trm 文件是必修課。但在 AIX 平台,直接 rm * 常遭遇經典報錯:
ksh: /usr/bin/rm: 0403-027 The parameter list is too long
本文深度解析根因,提供三種分級解決方案,並附贈生產級清理腳本模板。
ncargs 的限制exec() 系統調用的參數+環境變量總長度有硬性限制,由 ncargs 參數控制(單位:4KB 塊)。rm,拋出上述錯誤。rm 命令本身的限制,而是 Shell 展開通配符後參數列表過長導致。ncargs(需重啟,慎用於生產核心節點)# 查看當前值
lsattr -El sys0 -a ncargs
# ncargs 6 ARG/ENV list size in 4K byte blocks True
# 修改為 64(256KB),支持更長參數列表
chdev -l sys0 -a ncargs=64
# sys0 changed
注意: 修改生效需重啟 OS。生產環境需變更窗口、評估影響,非首選應急方案。
find -exec 逐個刪除(通用、無需重啟、最安全)# 刪除當前目錄下所有普通文件
find ./ -type f -exec rm {} \;
# 針對性刪除 trace 文件(推薦)
find $ORACLE_BASE/admin/$ORACLE_SID/bdump -name "*.trc" -type f -exec rm {} \;
find $ORACLE_BASE/admin/$ORACLE_SID/udump -name "*.trc" -type f -exec rm {} \;
find 遍歷文件系統,逐個調用 rm,每次參數列表極短,繞過 ncargs 限制。fork/exec 開銷大,速度較慢。核心思想:ls 列表 → awk 取文件名 → for 循環逐個/分批 rm。
clean_trace.sh#!/bin/ksh
# 設置 ORACLE_SID 或作為參數傳入
ORACLE_SID=${1:-$ORACLE_SID}
BASE_DIR=$ORACLE_BASE/admin/$ORACLE_SID
# 定義待清理目錄數組
DIRS=(
"$BASE_DIR/bdump"
"$BASE_DIR/udump"
"$BASE_DIR/cdump"
)
# 可選:只刪除 N 天前的文件
RETENTION_DAYS=${2:-7}
for dir in "${DIRS[@]}"; do
if [[ -d "$dir" ]]; then
echo "[$(date)] Cleaning $dir ..."
# 使用 xargs 分批刪除,比 for 循環快得多
find "$dir" -name "*.trc" -type f -mtime +$RETENTION_DAYS -print0 |
xargs -0 -r -n 100 rm -f
echo "[$(date)] Done $dir"
fi
done
find ... -print0 | xargs -0 -n 100:以空字符分隔文件名,完美處理含空格/特殊字符文件名;每批 100 個參數調用 rm,平衡進程開銷與參數長度。-mtime +7:保留最近 7 天,避免誤刪進行中的診斷 trace。cron 定時任務:0 2 * * 0 /home/oracle/scripts/clean_trace.sh ORCL 7 >> /home/oracle/logs/clean_trace.log 2>&1,每週日凌晨 2 點自動執行。Oracle 11g 引入 ADR(Automatic Diagnostic Repository),trace 文件自動歸檔至 ADR Home,可用 ADRCI 策略化管理:
adrci> SHOW HOMES
adrci> SET HOMEPATH diag/rdbms/orcl/ORCL
adrci> PURGE -AGE 10080 -TYPE TRACE -- 刪除 7 天前 (10080 分鐘) 的 trace
adrci> PURGE -AGE 10080 -TYPE ALERT -- 同步清理 alert 日志
SHORTP_POLICY、LONGP_POLICY 自動執行。bdump/udump 清理。rm -rf * 或 rm * 直接清理大量文件目錄,AIX/Linux 均會觸發參數列表過長或 Shell 參數限制。df -g $ORACLE_BASE 告警閾值建議 80%,聯動清理腳本。掌握這套「根因分析 → 緊急方案 → 自動化腳本 → 原生工具遷移」的完整體系,讓 Trace 文件清理從「恐怖的手工事故」變為「可控的自動化運維」。