不能在原11g实例上就地升级到19c,必须走异机迁移路径——要么用rman+startup upgrade组合,要么用逻辑data guard滚动切换;rman restore后不能直接startup,因还原的仍是11g格式数据文件,19c实例启动时校验失败会报ora-00704/00702错误,须执行startup upgrade并运行catupgrd.sql完成版本跃迁。

不能在原11g实例上就地升级到19c,必须走异机迁移路径——要么用RMAN+startup upgrade组合,要么用逻辑Data Guard滚动切换。两种方式都绕不开“先还原/同步、再升级内核”这个核心动作。
为什么RMAN restore后不能直接startup?
RMAN只是把11g的数据文件物理复制过去,但19c实例无法识别11g的数据字典结构和块格式。直接STARTUP会触发ORA-00704或ORA-00702错误。
- 必须用19c的
sqlplus / as sysdba连接,执行STARTUP UPGRADE(不是STARTUP MOUNT) - 挂载后立即运行
@?/rdbms/admin/catupgrd.sql,这才是真正做版本跃迁的脚本 - 还原前没跑
preupgrade.jar?升级可能卡在30%——尤其当DBA_OBJECTS里有大量INVALID对象时
autoupgrade能用在主库上吗?
不能。autoupgrade设计上只支持单实例就地升级,而11g→19c跨大版本存在硬限制:compatible参数无法一步从11.2.0.4跳到19.0.0,且19c内核不读11g数据文件。
- 它只对逻辑备库生效,且必须先停掉SQL Apply:
ALTER DATABASE STOP LOGICAL STANDBY APPLY - 执行前确认
V$LOGSTDBY.STATE返回IDLE,否则会锁冲突导致静默挂起 - 升级报告写
SUCCESS≠同步恢复成功——后续必须重建LOG_ARCHIVE_DEST_2并补对象:EXEC DBMS_LOGSTDBY.INSTANTIATE_TABLE('SCHEMA','TABLE_NAME')
DBUA卡在Pre-Upgrade阶段怎么办?
DBUA不是图形界面卡住,而是底层检查失败。最常见原因是源库没开归档或没处于OPEN状态。
- 先手动跑预检:
@$ORACLE_HOME/rdbms/admin/utlu112i.sql(11g环境),再跑19c提供的utlu19c.sql - 日志别只看DBUA界面——查
$ORACLE_BASE/cfgtoollogs/dbua/下的完整日志,重点盯preupgrade.log里的ERROR行 - 升级完成后
COMPATIBLE仍是11.2.0?必须手动执行ALTER SYSTEM SET COMPATIBLE='19.0.0' SCOPE=SPFILE并重启,DBUA不会自动改
最容易被忽略的是兼容性检查点:主库没开补充日志、复制表缺主键、LOB字段没设ENABLE STORAGE IN ROW——这些在升级前不处理,逻辑DG切换后几秒内就会报ORA-16112或UNIQUE CONSTRAINT VIOLATION。











