如何安全地升级Oracle RAC集群的GI Home?

来源:JS教程作者:上海GEO公司头衔:草根站长
导读:本期聚焦于上海GEO公司创作的《如何安全地升级Oracle RAC集群的GI Home?》,敬请观看详情。升级RAC集群的GI Home是数据库运维中风险较高的操作,直接覆盖原Grid Infrastructure目录会导致OCR和Voting Disk版本错乱,甚至触发节点驱逐。为降低风险,推荐使用独立目录的out-of-place方式升级,保留旧版本以便快速回退。实际操作前应通过ocrconfig命令备份OCR、Voting Disk和OLR,同时使用cluvfy检查集群健康状态与升级前置条件。升级时先在第一个节点用gridSetup.sh安装新版本到新路径,再以root身份执行rootupgrade.sh,确认本地集群组件正常后,再在其余节点滚动执行。整个过程必须关注ASM实例和监听资源的版本一致性,升级完成后运行cluvfy后置检查并验证crs版本,稳定运行一段时间后再清理旧GI Home。该方式能明显减少停机时间并提升升级成功率。

在Oracle RAC环境中,GI Home承载着Cluster Ready Services、ASM实例以及Oracle Clusterware的核心组件。对GI Home进行升级并不是简单的软件替换,它涉及OCR、Voting Disk以及节点间一致性等关键因素。本文围绕独立目录升级方式,说明如何规划、执行和验证升级过程。

如何安全地升级Oracle RAC集群的GI Home?

为什么必须采用Out-of-Place方式升级GI Home

GI Home是Oracle Grid Infrastructure的安装目录,默认包含bin、crs、opmn、lib等子目录。Oracle数据库实例的Oracle Home可以存在多个版本,但集群件通常在所有节点上必须保持同一版本。如果将新版本直接覆盖旧GI Home,一旦升级中途失败,OCR和Voting Disk可能已经写入新版本格式,旧版本软件无法识别,导致集群无法启动且难以回退。

Out-of-place升级指的是将新版本安装到一个全新的目录,例如旧版本位于 /u01/app/19.0.0/grid,新版本安装到 /u01/app/21.0.0/grid。这种方式新旧共存,升级失败时只需重新指向旧GI Home即可恢复集群。Oracle官方也明确要求GI升级使用独立目录,不允许原地覆盖。

此外,out-of-place方式便于分批验证,可以在第一个节点升级后观察ASM磁盘组和OCR读写情况,再决定是否继续其余节点。即便需要回退,也只需要清理新目录和Inventory条目,不影响原环境。

升级前准备与集群健康检查

准备阶段最重要的工作是备份。OCR保存集群注册信息,Voting Disk保存节点成员关系,OLR保存本地集群配置。任何一项损坏都会导致集群无法启动。建议在升级前执行手动OCR备份,并将备份文件复制到共享存储和离线介质。

# 手动备份OCR
ocrconfig -manualbackup
# 导出OCR内容到文件,便于查看和恢复
ocrconfig -export /tmp/ocr_before_upgrade.exp
# 查看已有自动备份
ocrconfig -showbackup

同时使用cluvfy进行升级前校验,该工具会检查节点可达性、共享存储权限、内存和swap、内核参数等。根据输出修复所有失败项,不要忽略警告。

$GRID_HOME/bin/cluvfy stage -pre crsinst -upgrade -n all -verbose

还应检查集群当前状态,确认所有资源正常,没有节点处于驱逐状态。使用 crsctl stat res -t 查看资源状态,使用 crsctl check cluster -all 检查集群一致性。升级前建议停止业务连接并将数据库实例切换到受限模式,或者预留维护窗口。存储空间也要提前确认,新GI Home和安装文件通常需要额外10GB以上空间。

分节点执行滚动升级

升级时先在共享目录解压新版本安装介质。Oracle集群件的安装包通常是一个zip文件,解压后直接运行gridSetup.sh。

mkdir -p /u01/stage/gi21
cd /u01/stage/gi21
unzip -q /path/to/LINUX.X64_213000_grid_home.zip

进入解压目录,以grid用户运行安装程序。为保证一致性,可以先在第一个节点执行静默安装,响应文件中需要指定新GI Home路径、Inventory位置以及节点列表。

cd /u01/stage/gi21
./gridSetup.sh -silent \
  -responseFile /home/grid/gi_upgrade.rsp \
  -ignorePrereqFailure

响应文件中指定 ORACLE_HOME=/u01/app/21.0.0/gridINVENTORY_LOCATION=/u01/app/oraInventory。安装完成后不要立即运行root脚本,先在所有节点完成软件安装。第二阶段轮到root操作,在第一个节点执行rootupgrade.sh。

# 以root身份运行
/u01/app/21.0.0/grid/rootupgrade.sh

该脚本会停止旧版本集群栈,更新OCR格式,启动新版本集群组件。脚本输出会提示在另一个节点运行之前确认本节点状态。运行结束后检查本地集群状态。

crsctl check crs
crsctl stat res -t

若第一个节点升级成功且OCR、ASM、监听均正常,再登录第二个节点执行同样的rootupgrade.sh。滚动升级过程中,数据库服务会有短暂中断,但不会出现全集群同时停止。需要注意每个节点的ASM实例必须与新的GI Home版本匹配,不能出现一个节点新版本、另一个节点旧版本长期并存。如果某个节点失败,可优先使用旧GI Home启动集群并排查原因,而不要继续升级下一个节点。

升级后验证与旧版本清理

升级完成后需要使用cluvfy执行后置检查,确认所有节点均满足升级后的集群要求。

$NEW_GRID_HOME/bin/cluvfy stage -post crsinst -n all -verbose

检查结果应显示所有检查项通过。然后核对版本信息,确保所有节点返回相同版本。

crsctl query crs releaseversion
crsctl query crs softwareversion
srvctl config asm

还需验证OCR自动备份在新GI Home下能正常生成,可手动执行一次手动备份并查看输出。旧版本GI Home不要立即删除,建议保留至少一个完整备份周期,或者等待数据库稳定运行一周以上。清理旧GI Home前,先确认Inventory中旧版本条目可以移除,然后使用rm命令删除旧目录。如果今后需要审计或回退,保留安装日志和响应文件。

常见问题包括rootupgrade.sh因共享存储权限失败、OCR写保护导致升级中断、ASM实例无法挂载磁盘组等。出现这些问题时应检查存储节点权限、voting disk路径和asm_diskstring参数,通常能在日志中找到明确报错。处理完成后可从失败节点重新运行rootupgrade.sh,集群栈会自动恢复。整个升级过程务必在维护窗口内完成,并确保每个节点都通过验证后再进行下一节点操作。

Oracle RACGI Home升级RAC集群修改时间:2026-08-26 06:19:28

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。