dbua升级失败卡在“pre-upgrade information tool”阶段,主因是源库未open或未启用archivelog;需手动运行utlu112i.sql和utlu19c.sql预检,检查preupgrade.log;升级后须手动设compatible=‘19.0.0’并重启,再执行19c的utlrp.sql编译对象。
dbua 升级失败卡在“pre-upgrade information tool”阶段
dbua 启动后停在 pre-upgrade information tool(预升级信息检查)环节,不继续,常见于未提前运行 utlu19c.sql 或数据库处于非 open 状态。
- 必须确保源库为
OPEN状态且归档已启用(ARCHIVELOG),否则 DBUA 会静默挂起 - 手动执行一次预检脚本更可靠:以
SYS身份在 11g 环境中运行@$ORACLE_HOME/rdbms/admin/utlu112i.sql(11g 自带),再运行 19c 提供的@$ORACLE_HOME/rdbms/admin/utlu19c.sql—— 注意路径别用错版本目录 - 输出日志默认写入
$ORACLE_BASE/cfgtoollogs/dbua/,但 DBUA 卡住时往往没生成完整日志,优先查preupgrade.log(在$ORACLE_HOME/rdbms/admin/下) - 若提示 “Database is not in ARCHIVELOG mode”,别只改参数,要实际执行
ALTER DATABASE ARCHIVELOG并重启生效
升级后 COMPATIBLE 参数仍为 11.2.0,新特性无法使用
DBUA 完成后 SELECT VALUE FROM V$PARAMETER WHERE NAME = 'compatible'; 返回仍是 11.2.0.0.0,说明升级流程跳过了关键步骤。
-
COMPATIBLE不会在 DBUA 中自动提升,必须手动修改:升级成功、数据库 OPEN 后,立即执行ALTER SYSTEM SET COMPATIBLE='19.0.0' SCOPE=SPFILE;,然后重启实例 - 切勿在升级过程中提前改
COMPATIBLE,11g 实例无法识别 19c 的兼容值,会导致启动失败 - 改完后验证:重启后查
V$VERSION确认是 19c,再查V$PARAMETER确认compatible值,最后运行SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';测试典型 19c 特性是否可用
DBUA 报错 ORA-39700: database must be opened with UPGRADE option
这是 DBUA 尝试连接目标实例时最典型的权限/状态错误,不是数据库坏了,而是启动方式不对。
- DBUA 内部会尝试用
STARTUP UPGRADE启动实例,所以必须确保:1)实例当前是NOMOUNT或已关闭;2)ORACLE_SID和ORACLE_HOME指向 19c 安装路径;3)监听器配置里没有残留 11g 的静态注册项干扰 - 手动模拟 DBUA 行为可快速定位:用 19c 的
sqlplus / as sysdba连接,执行SHUTDOWN IMMEDIATE→STARTUP UPGRADE,如果报错,就不是 DBUA 的问题,而是环境没切干净 - 特别注意
ORACLE_HOME:升级前临时改过ORACLE_HOME环境变量,但 DBUA 启动脚本(如dbuashell)可能缓存了旧值,建议直接进 19c 的$ORACLE_HOME/bin目录下运行./dbua
升级后 PL/SQL 包失效或 INVALID 状态大量出现
升级完成、数据库 OPEN 后,查 DBA_OBJECTS 发现大量 STATUS = 'INVALID',尤其是自定义包和 Oracle 内置包(如 DBMS_STATS)。
- 这是正常现象,DBUA 默认不会自动重编译全部对象,需手动触发:
@$ORACLE_HOME/rdbms/admin/utlrp.sql(注意是 19c 目录下的脚本) - 别用 11g 的
utlrp.sql,路径错会导致编译失败或循环报错;执行前确认当前连接的是升级后的 19c 实例 - 耗时较长(尤其对象多时),可通过
SELECT COUNT(*) FROM DBA_OBJECTS WHERE STATUS = 'INVALID';监控进度,反复执行utlrp.sql直到返回 0 - 个别对象持续 INVALID,通常是依赖了被移除的旧特性(如
DBMS_JAVA在 19c 非 CDB 模式下默认禁用),需查DBA_ERRORS看具体报错
升级这事,真正卡住人的从来不是按钮点几下,而是环境没切干净、脚本路径抄错、或者以为 DBUA 会帮你做完所有事。尤其 COMPATIBLE 和 utlrp.sql 这两步,漏掉一个,后面功能就瘸一条腿。










