不能。ORAchk仅检查组件状态、日志风险及资源配置是否符合Oracle推荐,不验证跨节点故障时业务连续性,无法替代故障注入或高可用实测。
ORAchk 能不能直接判断 RAC 是否“真可用”
不能。orachk 是健康检查工具,不是故障注入或高可用验证工具。它只告诉你组件状态是否符合 oracle 推荐配置、日志里有没有已知风险模式、资源是否在预期范围内——比如 crsctl check crs 返回成功、srvctl status database 显示所有实例 online,不代表跨节点故障时业务不中断。
常见错误现象:ORAchk 报 “CRS is running” 但实际 VIP 漂移失败;或者 “ASM diskgroup mounted” 但某节点无法访问磁盘路径。这些都可能漏检,因为 ORAchk 默认不主动探测网络连通性或存储 I/O 延迟。
- 必须配合手动验证:比如在节点1上
srvctl stop instance -i <inst> -d <db></db></inst>,观察是否自动 failover 到其他节点,且应用连接不中断 - 默认扫描范围不含自定义脚本、应用层心跳、监听器负载均衡策略(如
LOAD_BALANCE=ON是否生效) - 若用非标准端口或私网地址(如
192.168.100.0/24),需显式传参-o "network=192.168.100.0/24",否则网络拓扑检查会跳过
ORAchk 扫描结果里哪些 Warning 真该立刻处理
不是所有 Warning 都影响高可用。重点盯住和集群稳定性强相关的几类:
-
ORA-15042类 ASM 磁盘缺失警告:说明某节点看不到共享盘,RAC 启动阶段就可能 hang 住,不是“只是告警” - “OCR backup not found in last 4 hours”:OCR 损坏会导致 CRS 无法启动,备份失效等于失去恢复能力
- “Time drift detected (>10s) between nodes”:时间不同步会让 GI 误判节点死亡,触发不必要的 eviction
- “Listener not configured for SCAN”:SCAN 监听器缺失会直接破坏客户端透明故障转移(TAF)能力
注意:像 “OS kernel parameter semmsl is 250, recommended is 32768” 这类参数偏低的 Warning,在小规模测试库可暂缓;但在生产 RAC 上,若并发连接超 500,大概率引发 ORA-00020: maximum number of processes exceeded。
ORAchk 在 19c GI 环境下运行失败的典型原因
19c 开始 GI 安装路径、权限模型和日志结构有变化,ORAchk 若未升级到对应版本(如 19.12+),常卡在初始化阶段。
- 报错
ERROR: Cannot determine Grid Infrastructure home:多半因ORACLE_HOME指向数据库软件而非 GI 软件,应先source /u01/app/19.0.0/grid/oracle.env(路径以实际oraenv输出为准) - 执行时提示
Permission denied:19c 默认禁用 root 用户直接运行,需用grid用户,并确保该用户对/u01/app/19.0.0/grid/log有读权限 - 输出中大量
SKIPPED: No data found for component 'GIMR':GIMR(Grid Infrastructure Management Repository)在 19c 默认不启用,这不是错误,是正常行为,不必补装
如何让 ORAchk 检查结果真正驱动运维动作
把报告当 PDF 存档没用。关键是要把检查项映射到可触发的响应流程。
- 用
-o "output=csv"生成结构化输出,再用 Python 脚本提取含"CRITICAL"或"WARNING"的行,自动发钉钉/邮件给 DBA - 把
ORAchk加入 crontab,但避免和crsctl check cluster同一时刻运行,否则可能争抢 CRS 资源导致误报 - 检查前务必确认
oraenv已加载 GI 环境变量,否则ORAchk会误以为这是单机数据库,跳过所有 RAC 特有检查项
RAC 健康度不是静态值,ORAchk 只能拍一张快照。真正难的是把每次快照差异变成变更管理依据——比如某次升级后 OCR 备份延迟从 2 小时变成 6 小时,这比任何单项 Warning 都更值得深挖。










