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;

详细见:Oracle SQL Plan Baseline

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

  1. 测试环境:先验证
  2. 预升级脚本:评估
  3. 完整备份:保护
  4. Flashback Database:回滚
  5. SQL Plan Baseline:稳定
  6. 业务低峰:影响小
  7. 验证完整:业务
  8. 监控 1 周:异常
  9. 兼容性保持:稳定
  10. 文档化:流程

13. 参考资料

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