rac日志采集必须用tfactl diagcollect -all或diagcollection.pl,禁用无参数tfactl;需ssh免密、各节点tfactl状态green、显式指定时间范围;ocr/voting disk状态、网络快照、ocr备份须人工补全;解压后目录时间戳、alertrac.log报错、各节点/crs/子目录缺一不可。
不能直接用 tfactl diagcollect 不加参数采集 rac 全集群日志——它默认只跑当前节点,漏掉 ocr、voting disk、其他节点的 alertrac.log 和 asm trace,sr 提交后基本会被打回重采。
tfactl diagcollect -all 是 RAC 场景下唯一推荐的自动采集方式
这个命令会并行 SSH 到每个节点执行本地采集,再汇总打包,但前提是:
• 各节点 root 用户已配置 SSH 免密(ssh root@rac2 能直连)
• 所有节点 tfactl status 显示 green(常见坑:某节点 tfactl 进程僵死但状态仍显示正常)
• 时间范围必须覆盖问题发生窗口,用 -from "Apr/10/2026 09:00:00" -to "Apr/10/2026 11:30:00" 显式指定比默认“最近 2 小时”更可靠
• 生成包路径固定为 /opt/oracle.ahf/data/<hostname>/diagcollection/</hostname>,解压后重点看 /crs/、/asm/、/database/<db_unique_name>/</db_unique_name> 三个子目录
diagcollection.pl 在 11g/12c 早期 RAC 中仍需手动执行
该脚本位于 $ORA_CRS_HOME/bin/diagcollection.pl,以 root 身份运行,但环境变量必须显式设置:
• export ORACLE_BASE=/u01/app/oracle
• export ORA_CRS_HOME=/u01/app/12.1.0.2/grid(注意不是 ORACLE_HOME)
• export HOSTNAME=$(hostname)(大小写敏感,必须和 crsctl check cluster -all 输出一致)
• 它生成的是分离的压缩包:crsData_*.tar.gz、ocrData_*.tar.gz、oraData_*.tar.gz,不自动合并,提交 SR 前需手动 tar -cf rac_diag_all.tar crsData_*.tar.gz ocrData_*.tar.gz oraData_*.tar.gz
• 12c 及以后版本建议优先用 tfactl,diagcollection.pl 已逐步被标记为 legacy
RAC 日志里哪些内容 tfactl / diagcollection.pl 都不会自动包含
这两类工具都只采集文件系统上的日志,以下三类关键数据必须人工补全:
• OCR 和 voting disk 的实时状态:ocrcheck -details、crsctl query css votedisk 输出要重定向保存(不能只截图)
• 集群网络快照:oifcfg getif 和 cluvfy comp nodecon -n all -verbose 必须在所有节点分别执行并保留完整输出
• 最近一次 OCR 自动备份:路径通常在 +GRID:/OCRBACKUP/ 或 $ORACLE_HOME/cdata/<cluster_name>/</cluster_name>,需用 asmcmd 进入 ASM 手动 cp 出来
提交 SR 前必须校验的三个硬性条件
Oracle 支持团队拒收包的高频原因就这三项:
• 解压后的 /diagcollection/ 目录时间戳必须覆盖问题发生时间(用 ls -lt 确认)
• 每个节点的 alertrac.log 文件末尾必须含问题时间段内的报错(比如 CRS 启动失败,要看到 “CRS-4639: Could not contact Oracle High Availability Services”)
• 包内不能缺任意一个节点的 /crs/ 子目录——哪怕某个节点当时没报错,也必须有该目录结构,否则支持工程师会质疑采集完整性











