能,但需满足硬性条件:操作系统为Linux 7+,11.2.0.4已打最新PSU,数据库为ARCHIVELOG模式且非READ ONLY,弃用组件须手动清理,必须运行preupgrade.jar生成修复脚本,并严格校验环境与参数。
DBUA能直接升级11.2.0.4到19c吗?能,但有硬门槛
可以,但前提是操作系统必须满足19c最低要求——linux 7或更高版本。如果还在用rhel6/centos6,dbua根本启动不了,连图形界面都弹不出来,报错类似libxtst.so.6: cannot open shared object file。这不是dbua的问题,是19c的二进制根本不链接旧glibc。别想着打补丁绕过,oracle明确不支持。
- 确认当前系统:运行
cat /etc/redhat-release或uname -r - 11.2.0.4必须已打最新PSU(如220118),否则preupgrade会报
ERROR: Database patch level is too low - 数据库必须处于
ARCHIVELOG模式,且不能是READ ONLY——DBUA会直接拒绝启动 - 如果用了OLAP、APEX、DB Control等已弃用组件,DBUA不会自动删,得手动跑
@?/olap/admin/catnoamd.sql、@?/apex/apxremov.sql、@?/rdbms/admin/emremove.sql
preupgrade.jar不是可选项,是必跑的“体检报告”
跳过这步等于蒙眼开车。它不光检查兼容性,还会生成具体修复脚本路径和SQL语句,比如告诉你哪些用户密码太弱要改、回收站里有多少GB对象该清、UTL_FILE_DIR参数是否还开着——这些在19c里已被废弃,但DBUA不会替你删,只报WARNING: UTL_FILE_DIR is deprecated。
- 执行命令必须用源库的JDK:
/u01/app/oracle/product/11.2.0/db_1/jdk/bin/java -jar /u01/app/oracle/product/19.3.0/dbhome_1/rdbms/admin/preupgrade.jar TERMINAL TEXT - 重点盯
ERROR和WARNING两栏,尤其INVALID OBJECTS数量——如果sys下有几十个失效对象,DBUA中途可能卡死在“recompiling invalid objects”阶段 - 生成的
preupgrade_fixups.sql和postupgrade_fixups.sql必须人工审阅,比如其中DROP SYNONYM可能误删业务依赖对象
DBUA静默模式比图形界面更稳,但参数极易写错
图形界面在远程X11转发不稳定时经常白屏或中断,而静默模式(-silent)全程日志可追溯。但-sourceDB、-targetOracleHome这些参数顺序和值稍错一点,DBUA就报ORA-01017: invalid username/password——其实根本没连库,是路径解析失败。
- 典型静默命令:
dbua -silent -sourceDB ORCL -sid ORCL -oracleHome /u01/app/oracle/product/11.2.0/db_1 -targetOracleHome /u01/app/oracle/product/19.3.0/dbhome_1 -upgradeTimezone true -recompile_invalid_objects true -
-sid必须和ORACLE_SID环境变量一致,大小写敏感;-sourceDB填的是TNS别名,不是实例名 - 务必加
-upgradeTimezone true,否则19c默认用新时区文件v32,而11g用v14,后续查SYSTIMESTAMP可能偏差数小时 - 升级过程不要动
$ORACLE_HOME环境变量——DBUA内部会切环境,你提前改会导致监听起不来
升级后第一件事不是连应用,是验证COMPATIBLE和密码文件
很多人升级完立刻启应用,结果报ORA-01017或ORA-28001: the password has expired。根本原因有两个:一是COMPATIBLE仍卡在11.2.0,导致19c新特性被锁死;二是19c默认启用SEC_CASE_SENSITIVE_LOGON=TRUE,而11g密码是大小写不敏感存储的,老密码文件不兼容。
- 登录新库后立刻查:
SHOW PARAMETER compatible,如果不是19.0.0,执行ALTER SYSTEM SET COMPATIBLE='19.0.0' SCOPE=SPFILE;并重启 - 删旧密码文件:
rm $ORACLE_HOME/dbs/orapw<code>ORCL,再用orapwd file=$ORACLE_HOME/dbs/orapw<code>ORCLformat=12.2 password=xxx重建(注意format=12.2才兼容19c的密码算法) - 检查监听是否注册新实例:
lsnrctl status里看SERVICE_NAME是不是指向19c的ORACLE_HOME,不是的话手工ALTER SYSTEM REGISTER
JSON类型、MEMOPTIMIZE等19c核心能力全不可用。这些都不是报错,而是静默降级。

















