Oracle 数据库版本升级
Oracle 数据库版本升级
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
数据库版本升级方案[1]:
路径:
- 11.2.0.4 → 19c
- 12.1.0.2 → 19c
- 12.2.0.1 → 19c
- 18.x → 19c
- 19c → 23ai
详细见:Oracle 升级到 19c。
2. 升级方式
2.1 DBUA
- 图形化
- 自动
- 推荐
2.2 手动
- 控制精细
- catupgrd.sql
- dbupgrade(19c)
2.3 Data Pump
- 跨版本
- 数据迁移
2.4 RMAN Restore
- 备份恢复
- 跨版本
3. 升级前评估
3.1 预升级脚本
-- 11g
@?/rdbms/admin/utlu112i.sql
-- 12c
@?/rdbms/admin/preupgrd.sql
-- 19c
@?/rdbms/admin/utlusts.sql
3.2 报告
$ORACLE_BASE/cfgtoollogs/<sid>/preupgrade/
3.3 修复
@?/rdbms/admin/preupgrade_fixups.sql
4. 升级前准备
4.1 备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
CREATE PFILE='/backup/initorcl.bak' FROM SPFILE;
4.2 Flashback
ALTER DATABASE FLASHBACK ON;
ALTER SYSTEM SET db_flashback_retention_target = 2880;
4.3 空间检查
SELECT tablespace_name, SUM(bytes) / 1024 / 1024 / 1024 AS gb
FROM dba_data_files
WHERE tablespace_name IN ('SYSTEM', 'SYSAUX', 'UNDOTBS1')
GROUP BY tablespace_name;
4.4 无效对象
SELECT COUNT(*) FROM dba_invalid_objects;
@?/rdbms/admin/utlrp.sql
5. 安装新版本软件
5.1 新 ORACLE_HOME
mkdir -p ******
chown -R oracle:oinstall /u01/app/oracle/product/19.0.0
5.2 静默安装
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
5.3 root 脚本
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
详细见:Oracle 19c 静默安装。
6. DBUA 升级
6.1 启动
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
dbua
6.2 步骤
1. 选择数据库
2. 升级选项
3. 恢复区
4. 网络
5. EM
6. 检查
7. 升级
6.3 验证
SELECT * FROM v$version;
SELECT comp_id, version, status FROM dba_registry;
7. 手动升级
7.1 关闭
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
sqlplus / as sysdba
SQL> SHUTDOWN IMMEDIATE;
7.2 复制配置
cp $OLD_ORACLE_HOME/dbs/initorcl.ora $NEW_ORACLE_HOME/dbs/
cp $OLD_ORACLE_HOME/dbs/orapworcl $NEW_ORACLE_HOME/dbs/
cp $OLD_ORACLE_HOME/network/admin/*.ora $NEW_ORACLE_HOME/network/admin/
7.3 启动升级模式
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
sqlplus / as sysdba
SQL> STARTUP UPGRADE;
7.4 升级脚本
-- 19c
SQL> @?/rdbms/admin/dbupgrade
-- 或
SQL> @?/rdbms/admin/catupgrd.sql
7.5 升级后
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
SQL> @?/rdbms/admin/utlrp.sql
SQL> @?/rdbms/admin/catuppst.sql
7.6 验证
SELECT * FROM v$version;
SELECT comp_id, version, status FROM dba_registry;
8. RAC 升级
8.1 滚动升级
# 节点 1
srvctl stop instance -db orcl -instance orcl1
# 升级软件 + 实例
# 节点 2
srvctl stop instance -db orcl -instance orcl2
# 升级软件 + 实例
8.2 GI 升级
./gridSetup.sh -silent -applyRU ...
详细见:Oracle Grid Infrastructure 安装。
9. 升级后
9.1 统计信息
EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
EXEC DBMS_STATS.GATHER_DATABASE_STATS;
9.2 SQL Plan Baseline
-- 升级前捕获
ALTER SYSTEM SET optimizer_capture_sql_plan_baselines = TRUE;
9.3 兼容性
-- 保持旧
SHOW PARAMETER compatible
-- 验证后再升
ALTER SYSTEM SET compatible='19.0.0' SCOPE=SPFILE;
9.4 性能对比
@?/rdbms/admin/awrddrpt.sql
详细见:Oracle 数据库升级性能评估。
10. 回滚
10.1 Flashback
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' HOUR);
ALTER DATABASE OPEN RESETLOGS;
详细见:Oracle 闪回技术。
10.2 备份恢复
RMAN> RESTORE DATABASE FROM TAG 'before_upgrade';
RMAN> RECOVER DATABASE;
11. 常见坑与排错
11.1 升级失败
-- 1. 日志
$ORACLE_BASE/cfgtoollogs/<sid>/upgrade/
-- 2. 重试
SQL> @?/rdbms/admin/dbupgrade
11.2 组件 INVALID
SQL> @?/rdbms/admin/utlrp.sql
SELECT * FROM dba_registry WHERE status != 'VALID';
11.3 ORA-00600
-- 1. Incident
SELECT * FROM v$diag_incident;
-- 2. 打包
adrci
ips create package ...
12. 最佳实践
- 测试环境:先验证
- 预升级脚本:评估
- 完整备份:保护
- Flashback Database:回滚
- SQL Plan Baseline:稳定
- 业务低峰:影响小
- 验证完整:业务
- 监控 1 周:异常
- 兼容性保持:稳定
- 文档化:流程
13. 参考资料
[1] Oracle Database Upgrade Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/