Oracle 数据库版本升级详解

Oracle 数据库版本升级详解

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Oracle 数据库版本升级方法[1]:

详细见:Oracle 数据库版本升级Oracle 数据库升级与迁移


2. 升级路径

2.1 支持路径

11.2.0.4 → 19c
12.1.0.2 → 19c
12.2.0.1 → 19c
18c → 19c
19c → 23ai

2.2 不支持

11.2.0.3 → 19c(需先升级到 11.2.0.4)
10g → 19c(需多步)

3. 升级方法

3.1 DBUA

- Database Upgrade Assistant
- 图形化
- 自动化
- 推荐

3.2 手动

- 脚本
- catupgrd.sql(12c-)
- catctl.pl(12c+)
- 控制更细

3.3 Data Pump

- 导出导入
- 跨版本
- 跨平台

3.4 Data Guard

- 滚动升级
- 最小停机

4. 升级前检查

4.1 preupgrade.jar

java -jar $ORACLE_HOME/rdbms/admin/preupgrade.jar FILE DIR /tmp/preup

4.2 报告

cat /tmp/preup/preupgrade.log

4.3 修复

-- 按 preupgrade 报告执行
@/tmp/preup/preupgrade_fixups.sql

5. DBUA 升级

5.1 启动

$ORACLE_HOME/bin/dbua

5.2 步骤

1. 选择数据库
2. 前置检查
3. 选项(并行度、时区、统计信息)
4. 备份选项
5. 执行升级
6. 验证

5.3 优势

- 自动化
- 前置检查
- 错误处理
- 回退

6. 手动升级

6.1 关闭

SHUTDOWN IMMEDIATE;

6.2 软件

# 安装新版本软件
./runInstaller

6.3 启动

export ORACLE_HOME=/u01/app/oracle/product/19c
sqlplus / as sysdba
STARTUP UPGRADE;

6.4 升级

cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catctl.pl -n 4 catupgrd.sql

6.5 后置

@?/rdbms/admin/utlrp.sql
@?/rdbms/admin/catpostupgrade.sql

6.6 验证

SELECT version FROM v$instance;
SELECT * FROM dba_registry;

7. Data Pump 升级

7.1 导出

# 旧版本
expdp system/password DIRECTORY=dp DUMPFILE=full.dmp FULL=Y

7.2 创建新库

# 新版本 DBCA
dbca -createDatabase ...

7.3 导入

# 新版本
impdp system/password DIRECTORY=dp DUMPFILE=full.dmp FULL=Y

8. Data Guard 滚动升级

8.1 流程

1. 升级备库软件
2. Failover 到备库
3. 升级原主库软件
4. Switchover 回原主库

8.2 优势

- 最小停机
- 零数据丢失
- 简化

详细见:Oracle Data Guard Switchover 与 Failover 详解


9. 升级后任务

9.1 编译

@?/rdbms/admin/utlrp.sql

9.2 统计

EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

9.3 时区

SELECT DBMS_DST.GET_ERROR_LIST FROM dual;

9.4 无效对象

SELECT object_name, object_type, status 
FROM dba_objects 
WHERE status = 'INVALID';

9.5 组件

SELECT comp_id, comp_name, version, status 
FROM dba_registry;

10. 回退

10.1 DBUA 回退

- DBUA 自动备份
- Flashback Database
- 恢复

10.2 手动

- 软件版本恢复
- 控制文件/数据文件恢复
- RESETLOGS

10.3 Data Pump

- 旧库保留
- 重新导入

11. 升级前准备

11.1 备份

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
RMAN> BACKUP CURRENT CONTROLFILE;

11.2 Guaranteed Restore Point

CREATE RESTORE POINT before_upgrade GUARANTEE FLASHBACK DATABASE;

详细见:Oracle Flashback Database 详解

11.3 测试

- 测试环境演练
- 应用兼容性
- 性能基准

12. 升级后验证

12.1 数据库

SELECT name, open_mode, version FROM v$instance, v$database;

12.2 对象

SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';

12.3 应用

- 业务功能
- 性能
- 错误

13. 常见问题

13.1 ORA-01092

- 升级失败
- 检查 alert log
- 修复

13.2 无效对象

- utlrp.sql
- 手动编译

13.3 性能问题

- 统计信息
- 执行计划
- 优化器变更

14. 最佳实践

  1. 测试:演练
  2. 备份:升级前
  3. GRP:Flashback
  4. preupgrade:检查
  5. DBUA:推荐
  6. 滚动升级:Data Guard
  7. 应用兼容:测试
  8. 监控:升级后
  9. 回退预案:准备
  10. 文档:记录

15. 参考资料

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