tfa未清理incident目录是因为默认仅清理trace/alert/core(保留30天),incident/hm/ir目录需显式启用-cleanup_incident true且19c需tfa19.12+版本支持,旧incident须先执行tfactl cleanup -all -force扫描后才纳入清理。

为什么 tfa 没清掉 incident 目录?
Oracle 19c RAC 中 incident 目录(如 /u01/app/oracle/diag/rdbms/orcl/orcl/incident)爆满,通常不是因为 tfa 没运行,而是它默认根本不管这个目录——tfa 的自动清理只覆盖 trace、alert、core 三类,incident、hm、ir 默认被跳过。19c 的 tfa19.12+ 虽支持配置 incident.retention.days,但必须显式开启,且只对新生成的 incident 生效。
常见误判:看到 tfactl print config | grep cleanup 显示 cleanup.enabled=true 就以为万事大吉,其实那只是 trace/alert 的开关。
- 查当前清理策略:
$TFA_HOME/bin/tfactl print cleanupconfig,确认是否含cleanup_incident: true - 若无,需在所有节点分别执行:
$TFA_HOME/bin/tfactl configure -cleanup_incident true -incident_retention_days 15 - 已有大量旧 incident 不会立刻被删,得先触发扫描:
$TFA_HOME/bin/tfactl cleanup -all -force
adrci 能不能直接清理 incident?
不能。adrci 的 purge 命令仅支持 -type alert 和 -type trace,对 incident 类型完全不识别。执行 purge -type incident 会报错 ADRCI-0070,属于工具能力边界限制,不是权限或路径问题。
想用 adrci 清理,只能针对 alert 和 trace 目录:
- 进
adrci后先show home,再set homepath diag/rdbms/orcl/orcl - 清理 7 天前的 alert:
purge -age 10080 -type alert(单位分钟) - 清理 7 天前的 trace:
purge -age 10080 -type trace - 注意:
purge不递归子目录,incident下的incdir_*不受影响
手动删 incident 文件安全吗?
在确认数据库已稳定运行、无活跃 ORA-600/ORA-7445 报错的前提下,可以手动清理,但必须绕过 tfa 的监控路径,否则会导致元数据错乱,后续 tfactl view 失效或漏日志。
正确做法是:先让 tfa 主动归档再清理,而非硬删:
- 临时止血(磁盘 >95% 时):
$TFA_HOME/bin/tfactl disable collection - 强制扫描并标记过期:
$TFA_HOME/bin/tfactl cleanup -all -force - 等执行完成(看
tfactl view cleanuphistory状态为SUCCESS),再启用采集:$TFA_HOME/bin/tfactl enable collection - 若仍需人工干预,只删
incdir_*中明确标记为closed且时间远超保留期的子目录,不碰incdir_00001这类正在写入的目录
RAC 环境下最容易被忽略的同步点
清理配置不是设一次就全局生效。RAC 多节点中,tfa 版本必须严格一致,否则 tfactl configure 在某节点执行后,其他节点仍按旧策略跑,还会出现 Node xxx has different TFA version 报错。
检查和修复步骤:
- 所有节点分别执行:
ps -ef | grep tfa,确认进程存在且路径一致 - 比对版本:
$TFA_HOME/bin/tfactl version,若不一致,需统一升级或重装 -
cleanup配置需在每个节点单独执行,tfactl configure不跨节点同步 - 清理历史记录也分节点存储,
tfactl view cleanuphistory必须逐个节点检查
真正卡住空间释放的,往往不是单个目录没删干净,而是节点间策略不同步 + tfa_storage 元库损坏后静默失效——这点在紧急处理时最易被跳过。











