导读:本期聚焦于阿狸创作的《Oracle RAC集群如何平滑升级GI与DB版本?完整操作步骤详解》,敬请观看详情。RAC集群的Grid Infrastructure和Database版本升级是DBA工作中风险较高的操作之一,一旦顺序出错或前置检查遗漏,很容易导致集群节点无法启动。本文以一套实际的两节点RAC环境为例,详细讲解升级前的准备工作,包括运行runcluvfy预检查、备份OCR和 voting disk、确认补丁版本一致性等关键环节,然后分步骤演示使用rootupgrade.sh升级GI、使用dbua或手动方式升级DB的具体命令与回退要点,最后总结升级过程中常见的报错和处理经验,帮助读者顺利完成整套升级流程。

Oracle RAC集群的升级历来是DBA面试和实际运维中的高频话题。相比单实例数据库,RAC环境多了一层Grid Infrastructure(GI),升级时既要保证集群件本身平滑过渡到新版本,又要保证数据库实例(DB)在集群框架升级后能够继续正常运行。整个流程环环相扣,任何一步顺序颠倒都可能造成节点驱逐甚至集群瘫痪。本文结合一套11.2.0.4升级到19c的两节点RAC环境的实操经验,把GI升级和DB升级的完整过程、命令细节以及回退思路梳理清楚。

Oracle RAC集群如何平滑升级GI与DB版本?完整操作步骤详解

升级前的准备工作:预检查比操作更重要

RAC升级失败的原因大部分不在升级命令本身,而在前期准备不充分。首先要在所有节点上运行Oracle官方提供的集群校验工具runcluvfy,这个工具在新版本GI软件的解压目录里就能找到。执行命令类似下面这样:

./runcluvfy.sh stage -pre crsinst -upgrade -n rac1,rac2 \
  -src_crshome /u01/app/11.2.0/grid \
  -dest_crshome /u01/app/19.0.0/grid \
  -dest_version 19.0.0.0.0 -fixup -verbose

这个命令会检查操作系统内核参数、磁盘空间、网络配置、用户组、ssh互信等几十项内容。检查结果中出现的WARNING需要逐条确认,ERROR则必须修复后重新跑一遍。经验上特别容易出问题的是/tmp空间不足、cvuqdisk包版本过低以及grid用户的ssh等效性配置失效,这三项建议优先排查。

其次是备份工作。OCR和voting disk在升级前必须备份,11.2以后OCR默认放在ASM里,可以用ocrconfig手动导出一份:

ocrconfig -export /backup/ocr_backup_$(date +%Y%m%d).dmp

同时还要确认数据库本身有可用的全量备份,ASM的spfile、密码文件位置记录清楚。另外要提前下载好新版本的GI安装包和最新的RU补丁,两节点软件的patch版本必须完全一致,否则升级到一半会报版本不匹配错误。操作系统层面,检查所有节点的时间同步服务,19c对NTP或Chrony的要求比旧版本更严格,时间偏差过大可能直接导致节点加入集群失败。

GI升级的详细步骤:滚动升级与rootupgrade.sh

GI升级支持滚动方式,即先升级一个节点,集群仍然运行在另一个节点上,业务不中断;如果不支持滚动(比如从非常老的版本跨大版本升级),则需要停机升级。以滚动升级为例,先在第一个节点用grid用户启动runInstaller,选择升级现有GI的选项,指向旧的Grid Home,安装过程只复制软件,不会切换集群配置。

安装界面执行到最后会提示以root身份在每个节点分别执行rootupgrade.sh,这是整个升级最关键的一步。第一个节点执行时脚本会停在一个提示信息处,大意是集群软件已在此节点配置完成,需要准备滚动升级其他节点,此时不要关闭窗口,去第二个节点执行同样的脚本:

/u01/app/19.0.0/grid/rootupgrade.sh

第二个节点脚本执行完成并输出Successfully setup Oracle Grid Infrastructure后,第一个节点的脚本才会继续往下走并最终结束。两个节点都完成后,用crsctl查询集群状态确认版本已经切换:

crsctl query crs softwareversion -all
crsctl stat res -t

升级后要注意一点:19c的GI Home目录结构发生了变化,不能再像11g那样直接在原目录打补丁,GI HOME变为只读,补丁要打到旁边的patch目录。如果升级后资源状态有OFFLINE的,先看alert日志定位,多数是监听端口冲突或ASM参数文件路径问题。

DB升级的两种方式:DBUA图形化与手动升级

GI升级完成后,数据库本身还运行在旧版本上,此时需要升级DB。第一种方式是DBUA图形化工具,在新版本的ORACLE_HOME下执行dbua,选择要升级的RAC数据库,工具会自动检查兼容参数、失效对象、回收站等前置条件,然后对所有实例执行升级。DBUA的优点是自动化程度高,会自动处理catctl并行升级数据字典,整个19c升级在数据量不大时通常半小时到一个小时就能完成。缺点是对错误的中断恢复不够友好,一旦中途失败,重跑前需要仔细清理现场。

第二种是手动方式,适合对过程要求完全可控的场景。大致流程是:先用旧版本DBMS_STATS收集统计信息、运行preupgrade.jar做升级前检查并执行fixup脚本,然后正常关闭数据库,修改ORACLE_HOME指向新版本后以upgrade模式启动一个实例,执行catctl.pl:

cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catctl.pl -n 4 catupgrd.sql

其中-n参数指定并行度,一般设为CPU核数的四分之一左右。升级完成后执行utlrp.sql编译失效对象,再跑postupgrade检查确认组件状态全部为VALID。无论哪种方式,升级前都要把COMPATIBLE参数保持原值,等新版本稳定运行一段时间后再考虑调高,因为COMPATIBLE一旦调高就无法回退。

升级结束后的验证不可省略:检查dba_registry中所有组件版本、确认ASM磁盘组兼容性参数、测试业务连接和RAC的故障切换功能,观察几天alert日志无异常后,才算整个升级真正落地。

常见报错与回退思路

实际操作中几个高频报错值得提前了解。一是rootupgrade.sh执行时报INS-40404错误,通常是主机SCAN配置或DNS解析问题,检查/etc/hosts中SCAN地址与nslookup结果是否一致。二是DBUA报数据库含有SYS拥有的失效对象拒绝升级,需要先执行utlrp.sql修复或在预检查报告中按提示处理。三是升级后ASM实例无法启动,多见于ASM的spfile还在旧GI Home下,需要用asmcmd或pfile重新指定位置。

回退方面,GI升级如果中途失败,可以执行crsctl config命令相关回退流程,或在rootupgrade.sh失败时直接按屏幕提示的恢复命令操作,恢复到旧Grid Home。DB升级由于修改了数据字典,回退成本极高,基本只能依赖升级前的全量备份做恢复,这也是为什么备份环节绝不能省。稳妥的做法是搭建一个与生产相同的测试环境完整演练一遍,把每一步的耗时和坑都记录下来,正式升级时按清单执行,风险就能降到最低。

Oracle RACGI升级数据库升级修改时间:2026-09-15 00:32:37

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