一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何修复Oracle安装中的INS-40406错误_通过清理Grid目录结构

时间:2026-06-23 09:00:46 编辑:袖梨 来源:一聚教程网

INS-40406错误本质是inventory.xml中Grid Home缺少CRS="true"属性或版本号不匹配,而非目录残留;安装程序仅依赖该文件判定是否存在可升级的GI,删目录不改inventory仍会报错。

ins-40406 错误本质不是目录没删干净,而是 inventory.xml 里 crs 标识丢失或版本错乱 —— 直接删 grid 目录反而会让问题更难定位。

为什么删了 /app/grid/11.2.0 还报 INS-40406

安装程序根本不去扫描 Grid 目录是否存在,它只读 /etc/oraInst.loc 指向的 inventory 路径,再解析 inventory.xml 中的 HOME 条目是否带 CRS="true"、版本号是否匹配已知 GI 安装。你删了目录但没改 inventory,installer 就认为“有注册但没 CRS 实例”,直接判定为无有效 GI 可升级。

  • inventory.xmlHOME 元素缺少 CRS="true" 属性 → installer 忽略该条目
  • SAVED_WITH 版本号被升级脚本写成了新版本(如 11.2.0.4),但实际 Grid 目录仍是旧版(如 11.2.0.1)→ 版本校验失败
  • RAC 多节点环境下,只改了一个节点的 inventory.xml → 其他节点仍报错

必须手动编辑 inventory.xml 的三个关键位置

进入 $ORACLE_BASE/oraInventory/ContentsXML/(路径由 /etc/oraInst.locinventory_loc 决定),用 vi 编辑 inventory.xml

  • 找到对应 Grid home 的 <HOME> 标签,确保包含 CRS="true",例如:<HOME NAME="Ora11g_gridinfrahome1" LOC="/app/grid/11.2.0" TYPE="O" IDX="1" CRS="true">
  • 检查 <SAVED_WITH> 值是否与你当前实际部署的 Grid 版本一致(用 crsctl query crs activeversion$GRID_HOME/crs/install/rootcrs.pl -version 确认)
  • 确认 <NODE_LIST> 中的节点名和实际主机名完全一致(区分大小写,不能有多余空格或引号)

配套清理动作:ocr.loc 和 olr.loc 不能留

即使 inventory.xml 修好了,残留的 OCR/OLR 配置也会干扰 installer 判定集群状态:

  • 执行 ls -l /etc/oracle/ocr.loc /etc/oracle/olr.loc,存在就删:rm -f /etc/oracle/ocr.loc /etc/oracle/olr.loc
  • 别只删 ocr.loc —— olr.loc 是 Oracle Local Registry,在单节点 Oracle Restart 场景下起关键作用,漏删会导致 root.sh 执行失败
  • 如果之前跑过 rootcrs.pl -deconfig -force,它会自动清理这些文件;但若没跑过,必须手动清

验证修复是否生效的最快方式

不要急着重跑 runInstaller,先用 Oracle 自带工具确认 installer 能否识别出 GI:

  • 切换到 grid 用户,执行:oraenv → 输入 ORACLE_HOME 路径 → 再运行 crsctl check crs(应报 “CRS-4638: Oracle High Availability Services is online” 或明确提示未启动,但不报找不到命令)
  • opatch lsinventory -oh $GRID_HOME 检查能否正常列出补丁信息;失败说明 inventory.xml 结构仍有问题
  • 最关键的一步:以安装用户(非 root)执行 runInstaller -executePrereqs -silent -responseFile /path/to/response.rsp,看 prereq 检查是否跳过 INS-40406

inventory.xml 是 Oracle 安装体系里最脆弱的一环:它不校验路径真实性,只信 XML 内容;改错一个引号或属性名,整个升级流程就会在第一步卡死。动手前务必备份原文件,且所有 RAC 节点必须同步修改 —— 差一个节点,集群添加节点时照样失败。

热门栏目