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 优势

- 减少停机
- 滚动

详细见:Oracle Data Guard 架构详解


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. 最佳实践

  1. 预评估:preupgrd
  2. 备份:应急
  3. 新 HOME:Out-of-Place
  4. DBUA:简单
  5. 手动:精细
  6. Data Guard:滚动
  7. datapatch:必执行
  8. 时区:升级
  9. 统计:刷新
  10. 验证:完整

15. 参考资料

[1] Oracle Database Upgrade Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/