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. 最佳实践
- 测试:演练
- 备份:升级前
- GRP:Flashback
- preupgrade:检查
- DBUA:推荐
- 滚动升级:Data Guard
- 应用兼容:测试
- 监控:升级后
- 回退预案:准备
- 文档:记录
15. 参考资料
[1] Oracle Database Upgrade Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/