在 CentOS 上升级 Oracle 版本的可执行方案
一、升级路径与总体策略
- 明确目标版本与路径:先确认当前数据库版本与目标版本,再选择官方支持的升级路径(如跨大版本升级、同版本补丁集/Release Update 升级)。优先选择Out-of-place(异址)升级:在新目录安装新 Oracle Home,保留旧环境以便快速回退。升级前务必完成兼容性/认证检查、升级方法选择与完整备份。
- 小版本/补丁集升级:若只是从 19.3 → 19.9 → 19.14 这类 PSU/RU 升级,流程通常为:升级 OPatch → 冲突检查 → 停库/停监听 → 应用补丁 → 启动到升级模式执行 SQL → 编译无效对象 → 验证。
- 大版本升级:如 11g/12c → 19c,建议使用 AutoUpgrade 或 DBUA 完成,并在升级前完成统计信息收集、回收站清理、分布式事务处理等预检。
二、升级前准备清单(强烈建议逐项完成)
- 认证与规划:在 My Oracle Support 使用“Certifications”页确认操作系统、数据库版本与第三方应用的兼容性;阅读新版本的行为变更/弃用/不推荐特性;制定回退方案与测试计划。
- 备份与恢复:实施可恢复的全量备份(含数据库与必要的配置文件),确保可降级/恢复;必要时保留旧 Oracle Home 与参数文件。
- 新 Oracle Home 准备:在新目录安装目标版本的最新软件,并先行应用最新 RU/MRP/关键 one-off 补丁,再执行升级。
- 数据库预检:执行 AutoUpgrade analyze 生成待办清单;收集优化器统计信息;确认物化视图刷新已完成、无文件处于备份模式、无文件需要介质恢复、无未完成分布式事务、回收站已清空;如有 Data Guard,先同步备库;如使用 TDE,按指引拷贝 sqlnet.ora 与钱包;检查 listener.ora/tnsnames.ora 等网络配置。
三、标准升级步骤(适用于 19c 及相近版本,可按需裁剪)
- 环境校验与预检
- 查看当前版本:
sqlplus / as sysdba → SELECT * FROM v$version;
- 运行 AutoUpgrade:
java -jar autoupgrade.jar -config <config_file> -mode analyze,按输出修复问题。
- 升级 OPatch(示例为 19c)
- 备份旧 OPatch:
mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch.bak
- 解压新 OPatch:
unzip p6880880_190000_Linux-x86-64.zip -d $ORACLE_HOME
- 验证:
$ORACLE_HOME/OPatch/opatch version(19c 常见要求为 12.2.0.1.34+)。
- 冲突检查与补丁应用
- 冲突检查:
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <patch_dir>
- 停库与监听:
sqlplus / as sysdba → SHUTDOWN IMMEDIATE;;lsnrctl stop
- 应用补丁(GI/DB 分别在各 Home 执行):
$ORACLE_HOME/OPatch/opatch apply
- 升级数据库(两条常用路径,二选一或组合)
- AutoUpgrade(推荐):
java -jar autoupgrade.jar -config <config_file> -mode deploy
- DBUA:图形或静默方式启动升级向导,按提示完成升级。
- 升级后处理
- 编译无效对象:
@?/rdbms/admin/utlrp.sql
- 查询组件状态:
SELECT comp_name, version, status FROM dba_registry;
- 验证版本:
SELECT * FROM v$version;
- 回退与应急
- 若使用 Out-of-place 升级,直接切回旧 Oracle Home 并启动实例;如升级失败,利用备份执行时间点恢复/不完全恢复。
四、常见场景与注意事项
- 仅做小版本/补丁升级(如 19.3 → 19.18):重点在于OPatch 版本满足 README 要求、冲突检查、停库/监听、补丁应用与SQL 加载/无效对象编译;升级后核对
opatch lsinventory 与 v$version。
- 大版本升级(如 11g/12c → 19c):优先选择 AutoUpgrade/DBUA;严格完成统计信息收集、回收站清理、分布式事务处理、备份等预检;升级后复核弃用/不推荐特性与行为变更。
- 旧版本 10g 升级到 10.2.0.4(历史场景):先冷备,在现有 ORACLE_HOME 上运行 10.2.0.4 patchset runInstaller,然后
startup upgrade → 执行 @rdbms/admin/catupgrd.sql → shutdown immediate → startup → 执行 @rdbms/admin/utlrp.sql;如遇安装器系统版本校验问题,可在测试环境使用 -ignoreSysPrereqs(生产慎用)。
五、升级后验证与回退要点
- 功能与版本验证:
SELECT * FROM v$version;
SELECT comp_name, version, status FROM dba_registry;
- 关键业务回归与性能回归测试(按测试计划执行)。
- 监听与连接:
lsnrctl status 确认服务注册正常;tnsping/应用连接测试。
- 日志检查:
- 升级日志(AutoUpgrade/DBUA)、
alert_<SID>.log、install*.log、opatch 日志。
- 回退策略:
- Out-of-place:切回旧 ORACLE_HOME 启动实例;
- 备份恢复:使用升级前备份执行恢复;
- 补丁回退:使用 OPatch 的回退命令(如
opatch rollback -id <patch_id>),按 README 执行。
重要提示
- 生产环境操作务必在维护窗口进行,并提前在测试环境演练全流程。
- 涉及具体补丁编号、OPatch 版本与 one-off 补丁,请以 My Oracle Support 对应文档与 README 为准;任何操作前请完整备份并确认回退路径。