tfa在oracle 19c rac中可实现一键收集节点故障日志,但需确保所有节点tfa状态为running、按精确时间窗口和组件执行diagcollect、验证关键日志目录内容有效,并安全清理旧日志。

TFA 在 Oracle 19c RAC 中能真正实现“一键收集节点故障日志”,但前提是它已正确安装、运行且配置匹配当前故障特征;否则你执行的只是打包一堆无关日志,而不是定位问题的关键证据。
确认 TFA 已在所有节点 RUNNING 状态
没启动的 TFA 无法跨节点通信,diagcollect 命令会卡住或只收集本地。必须逐节点检查:
- 运行
$TFA_HOME/bin/tfactl status,输出中每个节点的 Status 必须是RUNNING,不能是STOPPED或UNKNOWN - 若某节点显示
NOT RUNNING,先查进程:ps -ef | grep tfa;常见原因是ORACLE_HOME未在 root 用户环境变量中设置(尤其 19c 默认不自动加载) - 临时修复:在该节点上以 root 执行
source /etc/oratab && export ORACLE_HOME=/oracle/app/product/193000/db_1 && $TFA_HOME/bin/tfactl start
用 tfactl diagcollect 指定故障时间窗口和组件
盲目收集最近 12 小时日志大概率漏掉关键现场——比如脑裂发生在 20:07,而你默认收的是 08:00–20:00。必须带时间参数:
- 按时间范围收(推荐):
$TFA_HOME/bin/tfactl diagcollect -from "2026-09-17 20:00:00" -to "2026-09-17 20:15:00"(注意引号和空格) - 只收特定组件(缩小体积+提速):
-component crs,asm,rdbms—— 若确定是集群驱逐问题,加-component crs即可,不用拉全量 - 加
-name my_crash_20260917可自定义压缩包名,避免和历史包混淆 - 不要用
-all:它会收集 OSWatcher、procwatcher 等非紧急诊断项,耗时翻倍且无实际帮助
验证收集结果是否包含真实故障线索
压缩包解压后,别急着传给 Oracle SR;先快速确认三个核心目录是否存在有效内容:
-
crs/trace/alert.log:看是否有CRS-1612、CRS-2412、ORA-29740等脑裂/驱逐标志 -
rdbms/<dbname>/trace/alert_<inst>.log</inst></dbname>:搜索terminating the instance due to fatal process death和具体进程名(如LGWR、DBW0) -
grid/<node>/crf/</node>(如果启用):这是 CRS 日志归档目录,crflog文件里常有网络丢包、心跳超时原始记录 - 若上述任一目录为空或只有 INFO 级日志,说明
diagcollect未命中真实故障时段,需重新指定更精确的-from/-to
清理旧日志前先禁用采集,避免元数据损坏
当 /u01 使用率 >95% 且你要紧急释放空间时,直接 rm -rf $TFA_HOME/repository 下的子目录会导致 tfactl view 报错、后续收集丢失索引——因为 TFA 依赖内部 tfa_storage 元数据库跟踪文件生命周期。
- 先止血:
$TFA_HOME/bin/tfactl disable collection(所有节点都要执行) - 再清理:
$TFA_HOME/bin/tfactl cleanup -all -force(该命令会主动扫描并安全删除过期文件) - 最后恢复:
$TFA_HOME/bin/tfactl enable collection(否则下次diagcollect会失败) - 特别注意:
incident目录默认不清理,若故障由大量ORA-600触发,必须额外执行:$TFA_HOME/bin/tfactl configure -cleanup_incident true -incident_retention_days 7
真正难的不是执行命令,而是把“节点宕机”这个现象,准确映射到 TFA 能识别的时间点和组件范围——多数人反复重试,其实输在第一步没确认好故障发生的确切时间戳和关联进程名。











