crsctl check crs 无法执行时,diag/crs 目录可能未生成,因其依赖 ADR 启用且路径可写;需确认 root.sh 是否成功运行、ORACLE_BASE 是否一致,并检查 ora.crsd 是否 ONLINE。
crsctl check crs 无法执行时,diag/crs 目录可能根本没生成
oracle rac 的 _diag/crs 不是安装即有,它依赖 crs 自动诊断框架(adr)是否启用且路径可写。常见现象是执行 crsctl check crs 报错或返回不完整,接着发现 $oracle_base/diag/crs 为空或不存在。
-
crsctl check crs失败时,先确认root.sh是否已成功运行 —— 若未完成集群初始化,diag/crs根本不会创建 - 检查
ORACLE_BASE环境变量是否对root和grid用户一致,diag/crs默认基于$ORACLE_BASE/diag/crs/<hostname></hostname>,路径不一致会导致日志写入失败 - 手动触发一次 ADR 初始化:
crsctl start resources -all后等待 2 分钟,再查目录是否存在;若仍无,说明ora.crsd进程未真正启动
alert.log 位置不稳定?别硬记路径,用 ocrcheck -config 和 crsctl query crs activeversion 定位
RAC 的 alert.log 不像单机数据库固定在 $ORACLE_HOME/log/,它分散在每个节点的 CRS 主目录下,且版本不同路径略有差异。11g 是 $ORACLE_HOME/log/<hostname>/alert.log</hostname>,12c+ 则优先走 ADR 路径 $ORACLE_BASE/diag/crs/<hostname>/crs/trace/alert.log</hostname>。
- 先运行
ocrcheck -config查出 OCR 所在磁盘组和路径,CRS 日志根路径通常与 OCR 存储位置强相关 - 再执行
crsctl query crs activeversion确认版本,12.1 及以后默认启用 ADR,alert.log就在diag/crs/<hostname>/crs/trace/</hostname>下 - 如果
diag/crs存在但alert.log不见,检查crsctl stat res -t | grep ora.crsd—— 若状态不是ONLINE,ora.crsd没跑起来,就不会写alert.log
grep 提取告警总漏关键行?alert.log 是滚动 + 多进程并发写入,必须加 -B 2 -A 1 上下文
直接 grep "CRS-2112" alert.log 很容易错过上下文:比如 CRS-2112(CSS 同步失败)常紧接在 “CSSD waiting for network heartbeat” 之后,而错误前的资源状态快照才是根因线索。
- 强制带上下文:
grep -B 2 -A 1 "CRS-" alert.log | grep -E "(CRS-|ORA-|ERROR|WARNING)",避免只抓孤立错误码 - 注意时间戳格式不统一:11g 是
2024-03-15 14:22:03.123,12c+ 改为2024-03-15 14:22:03.123789(微秒级),用awk '/2024-/{print NR,$0}'比单纯tail -n 100更可靠 - 多个节点日志要合并分析时,别用
cat node1.log node2.log > all.log—— 时间线会乱,改用awk '{print FILENAME ":" $0}' node*.log | sort -k2,2
ORA-15042、CRS-4640 这类错误为什么在 alert.log 里找不到?它们只进 cssd.log 或 ohasd.log
alert.log 是 CRS 层的“汇总视图”,但底层组件(CSS、OHAS、EVMD)各自有独立日志,很多致命错误根本不经过 alert.log。比如磁盘心跳丢失触发的 ORA-15042,实际记录在 $ORACLE_HOME/log/<hostname>/cssd/ocssd.log</hostname>;而 CRS-4640(OHASD 启动失败)只出现在 $ORACLE_HOME/log/<hostname>/ohasd.log</hostname>。
- 必须按组件查日志:
cssd.log对应集群同步服务,ohasd.log对应 Oracle High Availability Services,evmd.log对应事件管理器 - 这些日志默认不轮转,单个文件可能超 GB,用
tail -n 500 cssd.log | grep -i "failure\|miss\|timeout"比全文 grep 更快定位 - 如果
cssd.log里反复出现"Missed network heartbeat",但alert.log没报错,说明 CSS 已降级运行,此时crsctl check crs可能仍显示正常 —— 这就是最危险的静默异常










