1. 首页 > Oracle教程 > 正文

Oracle教程FG451-升级基础

本文档风哥主要介绍Oracle升级基础相关知识,包括升级的概念、升级类型、升级使用、升级规划、升级配置、升级监控、升级故障处理等内容,由风哥教程参考Oracle官方文档Install and Upgrade内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 升级的概念

Oracle数据库升级是指将数据库从一个版本升级到更高版本的过程。升级可以获得新功能、性能改进、安全增强等好处。Oracle升级包括数据库软件升级和数据库数据升级两个部分,需要仔细规划和执行。更多视频教程www.fgedu.net.cn

Oracle升级的特点:

  • 版本提升:升级到更高版本
  • 新功能:获得新功能
  • 性能改进:性能优化
  • 安全增强:安全增强
  • 支持周期:延长支持周期

1.2 升级类型

Oracle升级类型:

  • 主要版本升级:如11g到12c、12c到19c
  • 次要版本升级:如12.1到12.2
  • 补丁集升级:如19.3到19.9
  • PSU/RU升级:季度补丁升级
  • 安全补丁升级:安全补丁升级
# 升级类型说明

1. 主要版本升级
– 如11g到12c、12c到19c
– 变化较大
– 需要仔细规划
– 可能需要应用调整
– 风险较高

2. 次要版本升级
– 如12.1到12.2
– 变化适中
– 需要规划
– 可能需要少量调整
– 风险适中

3. 补丁集升级
– 如19.3到19.9
– 变化较小
– 规划简单
– 通常无需调整
– 风险较低

4. PSU/RU升级
– 季度补丁升级
– 变化最小
– 规划简单
– 无需调整
– 风险最低

5. 安全补丁升级
– 安全补丁升级
– 针对安全问题
– 需要及时安装
– 风险较低
– 建议定期安装

1.3 升级使用

Oracle升级使用:

  • 获得新功能:使用新版本的新功能
  • 性能改进:获得性能改进
  • 安全增强:获得安全增强
  • 支持周期:延长支持周期
  • 问题修复:修复已知问题
风哥提示:升级是数据库管理的重要任务,建议掌握升级方法和流程。

Part02-生产环境规划与建议

2.1 升级规划

Oracle升级规划要点:

# 升级规划
– 升级评估:评估升级的必要性和可行性
– 升级路径:确定升级路径
– 升级时间:确定升级时间
– 升级测试:制定升级测试计划

# 升级评估规划
– 业务需求:评估业务需求
– 功能需求:评估功能需求
– 性能需求:评估性能需求
– 安全需求:评估安全需求
– 支持需求:评估支持需求

# 升级路径规划
– 直接升级:直接升级到目标版本
– 中间升级:先升级到中间版本
– 迁移升级:使用迁移方式升级
– 选择合适的升级路径

# 升级时间规划
– 维护窗口:选择合适的维护窗口
– 业务低峰:选择业务低峰期
– 充足时间:预留充足的升级时间
– 回滚时间:预留回滚时间

# 升级测试规划
– 测试环境:在测试环境中测试
– 测试数据:使用测试数据
– 测试用例:制定测试用例
– 测试验证:验证升级结果

2.2 升级场景

Oracle升级场景:

  • 主要版本升级:11g到19c
  • 次要版本升级:12.1到12.2
  • 补丁集升级:19.3到19.9
  • PSU/RU升级:季度补丁升级
  • 安全补丁升级:安全补丁升级
# 升级场景

1. 主要版本升级
– 11g到19c
– 需要仔细规划
– 需要充分测试
– 需要应用调整
– 风险较高

2. 次要版本升级
– 12.1到12.2
– 需要规划
– 需要测试
– 可能需要调整
– 风险适中

3. 补丁集升级
– 19.3到19.9
– 规划简单
– 测试简单
– 通常无需调整
– 风险较低

4. PSU/RU升级
– 季度补丁升级
– 规划简单
– 测试简单
– 无需调整
– 风险最低

5. 安全补丁升级
– 安全补丁升级
– 及时安装
– 测试简单
– 无需调整
– 风险较低

2.3 升级最佳实践

Oracle升级最佳实践:

  • 充分测试:在测试环境中充分测试
  • 备份数据:升级前备份数据
  • 文档记录:记录升级过程
  • 回滚方案:制定回滚方案
  • 经验总结:总结升级经验
生产环境建议:升级需要建立完善的流程,建议充分测试、备份数据、文档记录。学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 升级配置

3.1.1 升级前检查

# 1. 检查数据库版本
SQL> select * from v$version;

BANNER
——————————————————————————–
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 – 64bit Production
PL/SQL Release 12.2.0.1.0 – Production
CORE 12.2.0.1.0 Production
TNS for Linux: Version 12.2.0.1.0 – Production
NLSRTL Version 12.2.0.1.0 – Production

# 2. 检查数据库组件
SQL> select comp_name, version, status from dba_registry;

COMP_NAME VERSION STATUS
—————————————- —————————— ————
Oracle Database Catalog Views 12.2.0.1.0 VALID
Oracle Database Packages and Types 12.2.0.1.0 VALID
JServer JAVA Virtual Machine 12.2.0.1.0 VALID
Oracle XDK 12.2.0.1.0 VALID
Oracle Database Java Packages 12.2.0.1.0 VALID

# 3. 检查无效对象
SQL> select count(*) from dba_objects where status = ‘INVALID’;

COUNT(*)
———-
0

# 4. 检查数据字典
SQL> execute dbms_dictionary_obj_check.check_all;

PL/SQL procedure successfully completed.

# 5. 使用预升级检查工具
$ cd /oracle/app/oracle/product/19c/dbhome_1/rdbms/admin
$ sqlplus / as sysdba @preupgrd.sql

Loading Pre-Upgrade Package…
***************************************************************************
Executing Pre-Upgrade Checks in FGEDUDB…
***************************************************************************
**********************************************************************
[Pre-Upgrade Checks]
**********************************************************************

** WARNING: TBD/INVALID OBJECTS FOUND **
The database contains TBD/INVALID objects.
Number of Invalid Objects: 0

** WARNING: OLD TIME ZONE FILE VERSION **
Database is using time zone file version 26
Target database will use time zone file version 32

**********************************************************************
[Pre-Upgrade Recommendations]
**********************************************************************

**********************************************************************
[Post-Upgrade Recommendations]
**********************************************************************

**********************************************************************
[Post-Upgrade Checks]
**********************************************************************

SQL> exit

# 6. 查看预升级报告
$ cat /oracle/app/oracle/cfgtoollogs/FGEDUDB/preupgrade/preupgrade.log

# 7. 执行预升级修复
$ sqlplus / as sysdba @preupgrade_fixups.sql

Executing Pre-Upgrade Fixup Scripts…
***************************************************************************

***************************************************************************
[Pre-Upgrade Fixup Scripts]
***************************************************************************

SQL> exit

# 8. 备份数据库
RMAN> backup database plus archivelog;

Starting backup at 2026-03-31 10:00:00
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=150 device type=DISK

channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/oracle/app/oracle/oradata/FGEDUDB/system01.dbf
input datafile file number=00002 name=/oracle/app/oracle/oradata/FGEDUDB/sysaux01.dbf
input datafile file number=00003 name=/oracle/app/oracle/oradata/FGEDUDB/undotbs01.dbf
input datafile file number=00004 name=/oracle/app/oracle/oradata/FGEDUDB/users01.dbf
channel ORA_DISK_1: starting piece 1 at 2026-03-31 10:00:00
channel ORA_DISK_1: finished piece 1 at 2026-03-31 10:05:00
piece handle=/backup/FGEDUDB_full_20260331_100000 tag=TAG20260331T100000 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:05:00
Finished backup at 2026-03-31 10:05:00

3.1.2 执行升级

# 1. 关闭数据库
SQL> shutdown immediate;

Database closed.
Database dismounted.
ORACLE instance shut down.

# 2. 设置新Oracle Home环境变量
$ export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export ORACLE_SID=FGEDUDB

# 3. 启动数据库到升级模式
$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026

Copyright (c) 1982, 2019, Oracle. All rights reserved.

Connected to an idle instance.

SQL> startup upgrade

ORACLE instance started.

Total System Global Area 5368709120 bytes
Fixed Size 8710176 bytes
Variable Size 1090519040 bytes
Database Buffers 4261412864 bytes
Redo Buffers 8069120 bytes
Database mounted.
Database opened.

# 4. 执行升级脚本
SQL> @?/rdbms/admin/catupgrd.sql

SQL> SET ECHO OFF
.
.
.
Oracle Database 19c Post-Upgrade Status Tool 03-31-2026 10:30:00
.
Component Current Version Elapsed Time
Name Status Number HH:MM:SS
.
Oracle Server UPGRADED 19.3.0.0.0 00:15:00
JServer JAVA Virtual Machine UPGRADED 19.3.0.0.0 00:02:00
Oracle XDK UPGRADED 19.3.0.0.0 00:01:00
Oracle Database Java Packages UPGRADED 19.3.0.0.0 00:01:00
.
Total Upgrade Time: 00:19:00
.
PL/SQL procedure successfully completed.

SQL> exit

# 5. 重启数据库
$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 – Production on Tue Mar 31 10:30:00 2026

Copyright (c) 1982, 2019, Oracle. All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.3.0.0.0 – Production

SQL> shutdown immediate;

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 5368709120 bytes
Fixed Size 8710176 bytes
Variable Size 1090519040 bytes
Database Buffers 4261412864 bytes
Redo Buffers 8069120 bytes
Database mounted.
Database opened.

# 6. 执行升级后检查
SQL> @?/rdbms/admin/utlu122s.sql

Oracle Database 19c Post-Upgrade Status Tool 03-31-2026 10:35:00
.
Component Current Version Elapsed Time
Name Status Number HH:MM:SS
.
Oracle Server VALID 19.3.0.0.0 00:15:00
JServer JAVA Virtual Machine VALID 19.3.0.0.0 00:02:00
Oracle XDK VALID 19.3.0.0.0 00:01:00
Oracle Database Java Packages VALID 19.3.0.0.0 00:01:00
.
Total Upgrade Time: 00:19:00
.
PL/SQL procedure successfully completed.

# 7. 执行升级后修复
SQL> @?/rdbms/admin/postupgrade_fixups.sql

Executing Post-Upgrade Fixup Scripts…
***************************************************************************

***************************************************************************
[Post-Upgrade Fixup Scripts]
***************************************************************************

SQL> exit

# 8. 编译无效对象
SQL> @?/rdbms/admin/utlrp.sql

TIMESTAMP
——————————————————————————–
COMP_TIMESTAMP UTLRP_BGN 2026-03-31 10:40:00

PL/SQL procedure successfully completed.

TIMESTAMP
——————————————————————————–
COMP_TIMESTAMP UTLRP_END 2026-03-31 10:45:00

PL/SQL procedure successfully completed.

# 9. 验证升级结果
SQL> select * from v$version;

BANNER
——————————————————————————–
Oracle Database 19c Enterprise Edition Release 19.3.0.0.0 – Production

SQL> select comp_name, version, status from dba_registry;

COMP_NAME VERSION STATUS
—————————————- —————————— ————
Oracle Server 19.3.0.0.0 VALID
JServer JAVA Virtual Machine 19.3.0.0.0 VALID
Oracle XDK 19.3.0.0.0 VALID
Oracle Database Java Packages 19.3.0.0.0 VALID

3.2 升级监控

3.2.1 配置升级监控脚本

# 1. 创建升级监控脚本
$ vi /home/oracle/scripts/monitor_upgrade.sh

#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 升级监控脚本

export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH

LOG_DIR=”/home/oracle/upgrade_monitor”
mkdir -p $LOG_DIR

DATE=$(date +%Y%m%d)
LOG_FILE=”$LOG_DIR/upgrade_monitor_$DATE.log”

echo “$(date): Starting upgrade monitor…” > $LOG_FILE

# 检查升级状态
sqlplus -s / as sysdba <> $LOG_FILE
set linesize 200
set pagesize 100

— 检查数据库版本
select * from v\$version;

— 检查组件状态
select comp_name, version, status from dba_registry;

— 检查无效对象
select count(*) from dba_objects where status = ‘INVALID’;

— 检查数据库状态
select name, open_mode, database_role from v\$database;

exit
EOF

echo “$(date): Upgrade monitor completed.” >> $LOG_FILE

# 发送报告
mail -s “Upgrade Monitor Report – $DATE” admin@fgedu.net.cn < $LOG_FILE # 2. 设置脚本权限 $ chmod +x /home/oracle/scripts/monitor_upgrade.sh # 3. 测试脚本 $ /home/oracle/scripts/monitor_upgrade.sh # 4. 设置定期监控 $ crontab -e # 每小时监控升级状态 0 * * * * /home/oracle/scripts/monitor_upgrade.sh >> /home/oracle/upgrade_monitor/cron.log 2>&1

3.3 升级故障处理

3.3.1 升级常见问题

# 问题1:升级失败

# 错误信息
ORA-01092: ORACLE instance terminated. Disconnection forced

# 解决方案
# 1. 查看告警日志
$ cat /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/alert_FGEDUDB.log

# 2. 恢复备份
RMAN> startup nomount;

RMAN> restore controlfile from ‘/backup/control_file_backup’;

RMAN> alter database mount;

RMAN> restore database;

RMAN> recover database;

RMAN> alter database open resetlogs;

# 问题2:组件状态无效

# 错误信息
COMP_NAME VERSION STATUS
—————————————- —————————— ————
Oracle Server 19.3.0.0.0 INVALID

# 解决方案
# 1. 重新编译
SQL> @?/rdbms/admin/utlrp.sql

# 2. 检查无效对象
SQL> select object_name, object_type from dba_objects where status = ‘INVALID’;

# 3. 手动编译
SQL> alter package compile;
SQL> alter view compile;

# 问题3:时区文件版本不匹配

# 错误信息
ORA-00600: internal error code, arguments: [qkebCreateColRef:1], [], [], [], [], [], [], [], [], [], [], []

# 解决方案
# 1. 检查时区文件版本
SQL> select * from v$timezone_file;

FILENAME VERSION CON_ID
——————– ———- ———-
timezlrg_32.dat 32 0

# 2. 升级时区文件
SQL> exec dbms_scheduler.stopped_job(‘SYS.ORA$AUTOTASK_TIMEZONE_FILE_UPD’);

SQL> @?/rdbms/admin/utltz_upgrade.sql;

# 3. 重启数据库
SQL> shutdown immediate;
SQL> startup;

风哥提示:升级是数据库管理的重要任务,建议掌握升级方法和流程。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 升级案例

在生产环境中执行升级的完整案例:

4.1.1 场景描述

某企业需要将Oracle数据库从12.2升级到19c。

4.1.2 分析步骤

# 1. 创建升级自动化脚本
$ vi /home/oracle/scripts/auto_upgrade.sh

#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 升级自动化脚本

export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH

LOG_DIR=”/home/oracle/upgrade”
mkdir -p $LOG_DIR

DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE=”$LOG_DIR/upgrade_$DATE.log”

echo “========================================” > $LOG_FILE
echo “Upgrade Report” >> $LOG_FILE
echo “Date: $(date)” >> $LOG_FILE
echo “========================================” >> $LOG_FILE

# 执行预升级检查
echo “” >> $LOG_FILE
echo “Running pre-upgrade checks…” >> $LOG_FILE
sqlplus -s / as sysdba @?/rdbms/admin/preupgrd.sql >> $LOG_FILE

# 执行预升级修复
echo “” >> $LOG_FILE
echo “Running pre-upgrade fixups…” >> $LOG_FILE
sqlplus -s / as sysdba @?/rdbms/admin/preupgrade_fixups.sql >> $LOG_FILE

# 备份数据库
echo “” >> $LOG_FILE
echo “Backing up database…” >> $LOG_FILE
rman target / <> $LOG_FILE
backup database plus archivelog;
EOF

# 执行升级
echo “” >> $LOG_FILE
echo “Running upgrade…” >> $LOG_FILE
sqlplus -s / as sysdba <> $LOG_FILE
shutdown immediate;
startup upgrade;
@?/rdbms/admin/catupgrd.sql;
shutdown immediate;
startup;
@?/rdbms/admin/utlu122s.sql;
@?/rdbms/admin/postupgrade_fixups.sql;
@?/rdbms/admin/utlrp.sql;
EOF

# 验证升级结果
echo “” >> $LOG_FILE
echo “Verifying upgrade…” >> $LOG_FILE
sqlplus -s / as sysdba <> $LOG_FILE
set linesize 200
set pagesize 100

select * from v\$version;
select comp_name, version, status from dba_registry;
select count(*) from dba_objects where status = ‘INVALID’;
EOF

echo “” >> $LOG_FILE
echo “Upgrade completed at $(date)” >> $LOG_FILE

# 发送报告
mail -s “Upgrade Report – $DATE” admin@fgedu.net.cn < $LOG_FILE # 2. 设置脚本权限 $ chmod +x /home/oracle/scripts/auto_upgrade.sh # 3. 测试脚本 $ /home/oracle/scripts/auto_upgrade.sh

4.2 升级故障处理

在升级故障处理过程中的方法和技巧:

4.2.1 故障处理流程

# 升级故障处理流程

# 1. 识别问题
# – 查看告警日志
# – 查看升级日志
# – 检查数据库状态

# 2. 收集信息
# – 收集错误信息
# – 收集诊断数据
# – 收集系统信息

# 3. 分析原因
# – 分析错误原因
# – 分析升级路径
# – 分析配置问题

# 4. 制定方案
# – 制定修复方案
# – 制定回滚方案
# – 制定预防措施

# 5. 执行修复
# – 执行修复操作
# – 验证修复结果
# – 记录修复过程

# 示例:处理升级失败

# 1. 识别问题
$ cat /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/alert_FGEDUDB.log

# 2. 收集信息
SQL> select * from dba_registry;

# 3. 分析原因
— 组件升级失败

# 4. 制定方案
— 恢复备份,重新升级

# 5. 执行修复
RMAN> restore database;
RMAN> recover database;

4.3 升级优化

优化升级配置的最佳实践:

4.3.1 优化升级管理

# 1. 创建升级管理存储过程
SQL> create or replace procedure manage_upgrade_results(
p_upgrade_date in date,
p_source_version in varchar2,
p_target_version in varchar2,
p_upgrade_status in varchar2
) as
begin
dbms_output.put_line(‘— Upgrade Results Management —‘);
dbms_output.put_line(‘Upgrade Date: ‘ || to_char(p_upgrade_date, ‘YYYY-MM-DD HH24:MI:SS’));
dbms_output.put_line(‘Source Version: ‘ || p_source_version);
dbms_output.put_line(‘Target Version: ‘ || p_target_version);
dbms_output.put_line(‘Upgrade Status: ‘ || p_upgrade_status);

— 可以扩展为记录到表中
end manage_upgrade_results;
/

Procedure created.

# 2. 执行管理存储过程
SQL> set serveroutput on
SQL> exec manage_upgrade_results(sysdate, ‘12.2.0.1’, ‘19.3.0.0’, ‘SUCCESS’);

— Upgrade Results Management —
Upgrade Date: 2026-03-31 10:00:00
Source Version: 12.2.0.1
Target Version: 19.3.0.0
Upgrade Status: SUCCESS

PL/SQL procedure successfully completed.

# 3. 创建升级历史表
SQL> create table upgrade_history (
id number primary key,
upgrade_date date,
source_version varchar2(50),
target_version varchar2(50),
upgrade_status varchar2(50),
upgrade_duration number,
notes varchar2(4000)
);

Table created.

SQL> create sequence upgrade_history_seq;

Sequence created.

# 4. 记录升级历史
SQL> insert into upgrade_history values (
upgrade_history_seq.nextval,
sysdate,
‘12.2.0.1’,
‘19.3.0.0’,
‘SUCCESS’,
120,
‘Upgrade from 12.2 to 19c’
);

1 row created.

SQL> commit;

Commit complete.

# 5. 查看升级历史趋势
SQL> column upgrade_date format a20
SQL> select upgrade_date, source_version, target_version, upgrade_status
from upgrade_history
order by upgrade_date desc
fetch first 12 rows only;

UPGRADE_DATE SOURCE_VERSION TARGET_VERSION UPGRADE_STATUS
——————– ————– ————– —————
2026-03-31 10:00:00 12.2.0.1 19.3.0.0 SUCCESS
2026-03-30 10:00:00 12.1.0.2 12.2.0.1 SUCCESS
2026-03-29 10:00:00 11.2.0.4 12.1.0.2 SUCCESS

生产环境建议:升级优化需要建立完善的管理流程,建议充分测试、备份数据、记录结果。更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 升级总结

Oracle升级是数据库管理的重要任务,具有以下特点:

  • 版本提升:升级到更高版本
  • 新功能:获得新功能
  • 性能改进:性能优化
  • 安全增强:安全增强
  • 支持周期:延长支持周期

5.2 升级检查清单

Oracle升级检查清单:

  • 充分测试:在测试环境中充分测试
  • 备份数据:升级前备份数据
  • 文档记录:记录升级过程
  • 回滚方案:制定回滚方案
  • 经验总结:总结升级经验
  • 定期检查:定期检查升级状态

5.3 升级工具推荐

Oracle升级工具推荐:

  • DBUA:数据库升级助手
  • catupgrd.sql:手动升级脚本
  • preupgrd.sql:预升级检查工具
  • utlu122s.sql:升级后检查工具
  • Shell脚本:自动化升级过程
风哥提示:升级是数据库管理的重要任务,建议掌握升级方法和流程。from:www.itpux.com www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息