AutoUpgrade是Oracle 21c官方唯一支持的静默升级方式,用于将19c/18c/12.2非CDB升级并转换为21c多租户架构,自动处理预检查、停库、字典升级、重编译及验证;因21c强制要求CDB架构,直接运行catupgrd.sql会因“Database is not a CDB”报错退出。

autoUpgrade 是 Oracle 21c 中静默升级数据库字典(尤其是从非 CDB 升级到 21c 多租户架构)的官方推荐方式,它替代了传统 catctl.pl + catupgrd.sql 手动流程,能自动处理预检查、停库、升级、重编译、后置验证等环节。但要注意:21c 不再支持非 CDB 架构,所以“升级字典”本质是“转换+升级”,不是原地 patch。
用 autoUpgrade 完成非 CDB 到 21c 的静默字典升级
这是当前唯一被 Oracle 官方完整支持的静默路径,适用于 19c/18c/12.2 非 CDB 升级到 21c。
- 必须先在目标主机安装好
ORACLE_HOME指向 21c 软件(如/u01/app/oracle/product/21.0.0/dbhome_1),且已运行过oracle-database-preinstall-21c包 -
autoUpgrade工具随 21c 软件自带,位于$ORACLE_HOME/rdbms/admin/autoupgrade/;首次使用需执行java -jar autoupgrade.jar -create_config生成配置模板 - 关键配置项不能漏:
upg1.dbversion=21、upg1.target_cdb=true(强制转为 CDB)、upg1.source_pdb_name=ORCL(若源库 SID 是 ORCL) - 升级命令示例:
java -jar autoupgrade.jar -config upg_cfg.txt -mode analyze(先分析),确认无阻断错误后再执行-mode deploy - 整个过程不交互,日志默认输出到
$ORACLE_BASE/cfgtoollogs/autoupgrade/,重点关注upgrade_summary.html和upgrade.log
为什么不能直接 run catupgrd.sql?
因为 21c 的 catupgrd.sql 脚本内部会检测数据库是否为 CDB,如果不是,会立即报错退出:ORA-65096: invalid common user or role name 或更直接的 ERROR at line 1: ORA-65086: cannot open the pluggable database in non-CDB mode。这不是权限或路径问题,是架构硬限制。
- 即使你手动把
COMPATIBLE改成 21.0.0,也无法绕过该检查 - 试图用
STARTUP UPGRADE启动非 CDB 实例进升级模式,会在catctl.pl第一步就失败,提示 “Database is not a CDB” - Oracle 文档明确指出:“Upgrading a non-CDB to Oracle Database 21c requires conversion to a PDB first.”
静默升级中三个容易被忽略的破坏点
这些步骤在 autoUpgrade 日志里往往只是一行提示,但一旦出错,恢复成本极高。
-
preupgrade.jar分析阶段会生成preupgrade_fixups.sql和postupgrade_fixups.sql—— 必须人工检查并执行前者(比如清理回收站、禁用AUDIT规则),否则deploy会卡在 precheck 失败 - 升级过程中,
autoUpgrade会自动创建 CDB$ROOT 和种子 PDB(PDB$SEED),但不会自动创建你的源库对应的那个 PDB;它实际是把源库数据文件“拔插”进新 CDB,因此要求源库DB_NAME和目标 CDB 的DB_NAME一致,否则CREATE PLUGGABLE DATABASE ... USING语句会报ORA-65126 - 升级完成后,原
ORACLE_SID不再有效,必须用sqlplus / as sysdba连入 CDB$ROOT,再ALTER SESSION SET CONTAINER = <your_pdb_name>;如果忘了这步,所有连接都会显示CON_ID=1,误以为还在根容器里操作
真实环境里,最常卡住的地方不是命令写错,而是升级前没清掉 RECYCLEBIN 或者没关掉正在跑的 DBMS_SCHEDULER job —— 这些在图形化 DBUA 里会被弹窗提醒,但在静默模式下只写进日志末尾三行,一晃就过去了。


















