Oracle 升级到 19c
Oracle 升级到 19c
适用版本:Oracle Database 11g / 12c → 19c 文档版本:v1.0 / 2026-07
1. 概述
升级到 19c 是当前 LTS 推荐[1]:
升级路径:
- 11.2.0.4 → 19c
- 12.1.0.2 → 19c
- 12.2.0.1 → 19c
- 18.x → 19c
详细见:Oracle 数据库升级。
2. 升级方式
2.1 DBUA
- 图形化
- 自动
- 推荐
2.2 手动
- 控制精细
- 步骤多
2.3 Data Pump
- 跨平台
- 数据迁移
2.4 RMAN
- 备份恢复
- 跨版本
3. 升级前评估
3.1 预升级脚本
# 11g
$ORACLE_HOME/rdbms/admin/utlu112i.sql
# 12c
$ORACLE_HOME/rdbms/admin/preupgrd.sql
# 19c
$ORACLE_HOME/rdbms/admin/utlusts.sql
3.2 运行
sqlplus / as sysdba
SQL> @?/rdbms/admin/preupgrd.sql
SQL> @?/rdbms/admin/utlusts.sql
3.3 检查报告
$ORACLE_BASE/cfgtoollogs/<sid>/preupgrade/
3.4 升级前修复
# 自动修复
$ORACLE_HOME/rdbms/admin/preupgrade_fixups.sql
4. 升级前准备
4.1 备份
# 1. 完整备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
# 2. SPFILE
CREATE PFILE='/backup/initorcl.bak' FROM SPFILE;
4.2 空间检查
-- SYSTEM 表空间
SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024/1024, 2) AS gb
FROM dba_data_files
WHERE tablespace_name IN ('SYSTEM', 'SYSAUX', 'UNDOTBS1')
GROUP BY tablespace_name;
4.3 无效对象
SELECT COUNT(*) FROM dba_invalid_objects;
@?/rdbms/admin/utlrp.sql
4.4 参数
-- 兼容性
SHOW PARAMETER compatible
-- 至少 11.2.0
4.5 时间同步
# NTP
timedatectl status
5. 安装 19c 软件
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 /u01/app/oracle/product/19.0.0/dbhome_1/install/response/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. 升级
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 执行升级脚本
SQL> SET SERVEROUTPUT ON;
SQL> @?/rdbms/admin/catupgrd.sql
-- 或 19c
SQL> @?/rdbms/admin/dbupgrade
7.5 重启
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
7.6 升级后脚本
SQL> @?/rdbms/admin/utlrp.sql
SQL> @?/rdbms/admin/catuppst.sql
SQL> @?/rdbms/admin/utlu112s.sql
7.7 升级组件
SQL> 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 升级
# GI 升级
./gridSetup.sh -silent -applyRU ...
9. 升级后
9.1 验证
SELECT * FROM v$version;
SELECT comp_id, version, status FROM dba_registry;
SELECT name, open_mode FROM v$database;
SELECT name, open_mode FROM v$pdbs;
9.2 统计信息
EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
EXEC DBMS_STATS.GATHER_DATABASE_STATS;
9.3 兼容性
-- 保持旧兼容性一段时间
SHOW PARAMETER compatible
-- 验证后再升级
ALTER SYSTEM SET compatible='19.0.0' SCOPE=SPFILE;
9.4 测试
- 业务功能
- 性能
- 错误日志
10. 回滚
10.1 Flashback Database
-- 升级前启用
ALTER DATABASE FLASHBACK ON;
-- 回滚
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 SQL Plan Baseline
-- 升级前捕获
ALTER SYSTEM SET optimizer_capture_sql_plan_baselines = TRUE;
-- 升级后保留
11.2 性能对比
@?/rdbms/admin/awrddrpt.sql
详细见:Oracle 数据库升级性能评估。
12. 常见坑与排错
12.1 升级失败
-- 1. 日志
$ORACLE_BASE/cfgtoollogs/<sid>/upgrade/
-- 2. 重试
SQL> @?/rdbms/admin/dbupgrade
12.2 组件 INVALID
SQL> @?/rdbms/admin/utlrp.sql
SQL> SELECT * FROM dba_registry WHERE status != 'VALID';
12.3 字符集
-- 检查字符集
SELECT * FROM nls_database_parameters;
13. 最佳实践
- 测试环境:先验证
- 预升级脚本:评估
- 完整备份:保护
- Flashback Database:回滚
- SQL Plan Baseline:稳定
- 业务低峰:升级
- 验证完整:业务
- 监控 1 周:异常
- 兼容性保持:稳定
- 文档化:流程
14. 参考资料
[1] Oracle Database Upgrade Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/