Oracle 升级到 19c 详细流程
Oracle 升级到 19c 详细流程
适用版本:Oracle Database 11.2 / 12.1 / 12.2 → 19c 文档版本:v1.0 / 2026-07
1. 概述
升级到 19c 是 LTS 推荐[1]:
方式:
- DBUA 图形
- 手动升级
- Data Pump
- Data Guard
详细见:Oracle 数据库版本升级。
2. 升级路径
2.1 直接
11.2.0.4 → 19c
12.1.0.2 → 19c
12.2.0.1 → 19c
18.x → 19c
2.2 中间
11.2.0.1/2/3 → 11.2.0.4 → 19c
12.1.0.1 → 12.1.0.2 → 19c
3. 预升级
3.1 评估
# 19c ORACLE_HOME
cd $ORACLE_HOME/rdbms/admin
./preupgrd.sql -dir /tmp/preupg -src $OLD_HOME
3.2 报告
/tmp/preupg/preupgrade.log
/tmp/preupg/preupgrade_fixups.sql
/tmp/preupg/postupgrade_fixups.sql
3.3 修复
-- 执行预升级修复
@/tmp/preupg/preupgrade_fixups.sql
3.4 收集
EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
4. 备份
4.1 数据库
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
RMAN> BACKUP CURRENT CONTROLFILE;
4.2 ORACLE_HOME
tar -czf /backup/oracle_home.tar.gz $OLD_HOME
4.3 配置
# listener.ora / tnsnames.ora / sqlnet.ora
cp $OLD_HOME/network/admin/*.ora /backup/
详细见:Oracle 备份策略与最佳实践。
5. 安装 19c
5.1 新 HOME
mkdir -p ******
chown oracle:oinstall /u01/app/oracle/product/19.0.0/dbhome_1
5.2 安装
su - oracle
cd /u01/app/oracle/product/19.0.0/dbhome_1
unzip /tmp/LINUX.X64_193000_db_home.zip
./runInstaller -silent -responseFile /tmp/db_install.rsp -applyRU /tmp/ru
5.3 root
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
详细见:Oracle 数据库静默安装详解。
6. DBUA 升级
6.1 启动
su - oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
$ORACLE_HOME/bin/dbua
6.2 选项
- 选择数据库
- 升级时区
- 空间检查
- 并行
- 选项配置
6.3 静默
dbua -silent \
-dbname orcl \
-oracleHome /u01/app/oracle/product/11.2.0/dbhome_1 \
-newOracleHome /u01/app/oracle/product/19.0.0/dbhome_1 \
-upgradeTimezone \
-recompile_invalid_objects true \
-degree_of_parallelism 4
7. 手动升级
7.1 停数据库
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
EXIT
7.2 切换 HOME
# 修改 /etc/oratab
orcl:/u01/app/oracle/product/19.0.0/dbhome_1:Y
# 修改环境变量
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
7.3 复制文件
cp $OLD_HOME/dbs/init*.ora $ORACLE_HOME/dbs/
cp $OLD_HOME/dbs/orapw* $ORACLE_HOME/dbs/
cp $OLD_HOME/network/admin/*.ora $ORACLE_HOME/network/admin/
7.4 STARTUP UPGRADE
sqlplus / as sysdba
STARTUP UPGRADE;
EXIT
7.5 升级脚本
cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catctl.pl -n 4 catupgrd.sql
7.6 后续
sqlplus / as sysdba
@?/rdbms/admin/utlrp.sql
@?/rdbms/admin/catuppst.sql
EXIT
# datapatch
cd $ORACLE_HOME/OPatch
./datapatch -verbose
7.7 时区
SELECT version FROM v$timezone_file;
-- 如需升级
@$ORACLE_HOME/rdbms/admin/utltz_upg_check.sql
@$ORACLE_HOME/rdbms/admin/utltz_upg_apply.sql
7.8 固定对象
EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
8. Data Pump 升级
8.1 适用
- 跨平台
- 大版本跳跃
- 重建
8.2 流程
# 源导出
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full.dmp FULL=Y
# 安装 19c 新数据库
dbca -silent -createDatabase ...
# 目标导入
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full.dmp FULL=Y
详细见:Oracle Data Pump 全集。
9. Data Guard 升级
9.1 流程
1. 主备 19c ORACLE_HOME 安装
2. Standby 升级(停)
3. Switchover
4. 原 Primary 升级
5. Switchover 回
9.2 优势
- 减少停机
- 滚动
10. 验证
10.1 版本
SELECT version, status FROM v$instance;
SELECT * FROM v$version;
10.2 组件
SELECT comp_id, version, status FROM dba_registry;
10.3 无效对象
SELECT owner, object_type, COUNT(*)
FROM dba_objects
WHERE status = 'INVALID'
GROUP BY owner, object_type;
10.4 时区
SELECT version FROM v$timezone_file;
10.5 datapatch
SELECT patch_id, action, status, action_time
FROM dba_registry_sqlpatch
ORDER BY action_time DESC;
11. 性能
11.1 优化器
- 19c CBO 变化
- SQL Plan Baseline
- 监控
11.2 AWR 对比
@?/rdbms/admin/awrddrpt.sql
11.3 升级统计
EXEC DBMS_STATS.GATHER_DATABASE_STATS;
详细见:Oracle 数据库升级性能评估。
12. 回滚
12.1 DBUA
- 自动备份
- 回滚选项
12.2 手动
- 还原 ORACLE_HOME
- RMAN 还原数据库
- Flashback Database
13. 常见坑与排错
13.1 ORA-01092
- 升级失败
- 查 alert log
- 修复
13.2 时区
- 必须升级
- utltz_upg
13.3 无效对象
@?/rdbms/admin/utlrp.sql
13.4 组件失效
SELECT comp_id, status FROM dba_registry WHERE status != 'VALID';
14. 最佳实践
- 预评估:preupgrd
- 备份:应急
- 新 HOME:Out-of-Place
- DBUA:简单
- 手动:精细
- Data Guard:滚动
- datapatch:必执行
- 时区:升级
- 统计:刷新
- 验证:完整
15. 参考资料
[1] Oracle Database Upgrade Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/