本文档风哥主要介绍Oracle预升级工具相关知识,包括预升级工具的概念、预升级工具组成、预升级工具使用、预升级工具配置、预升级工具监控、预升级工具故障处理等内容,由风哥教程参考Oracle官方文档Install and Upgrade内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 预升级工具的概念
Oracle预升级工具(Pre-Upgrade Tool)是Oracle提供的一款用于检查数据库升级前状态的工具。预升级工具可以检测数据库是否存在升级前需要解决的问题,生成预升级检查报告,并提供修复建议。使用预升级工具可以确保升级过程顺利进行。更多视频教程www.fgedu.net.cn
- 检查全面:检查数据库升级前的各种状态
- 报告详细:生成详细的检查报告
- 建议明确:提供明确的修复建议
- 自动修复:提供自动修复脚本
- 支持多种版本:支持多种Oracle版本升级
1.2 预升级工具组成
Oracle预升级工具组成:
- preupgrd.sql:预升级检查脚本
- preupgrade_fixups.sql:预升级修复脚本
- utlu112s.sql:升级后检查脚本
- postupgrade_fixups.sql:升级后修复脚本
- 检查报告:预升级检查报告
1. preupgrd.sql
– 预升级检查脚本
– 检查数据库升级前状态
– 生成检查报告
– 提供修复建议
– 位于$ORACLE_HOME/rdbms/admin
2. preupgrade_fixups.sql
– 预升级修复脚本
– 自动修复部分问题
– 减少手动操作
– 提高升级效率
– 位于$ORACLE_HOME/rdbms/admin
3. utlu112s.sql
– 升级后检查脚本
– 检查升级后状态
– 验证升级结果
– 提供修复建议
– 位于$ORACLE_HOME/rdbms/admin
4. postupgrade_fixups.sql
– 升级后修复脚本
– 自动修复升级后问题
– 减少手动操作
– 提高升级效率
– 位于$ORACLE_HOME/rdbms/admin
5. 检查报告
– 预升级检查报告
– 位于$ORACLE_BASE/cfgtoollogs/{SID}/preupgrade
– 包含检查结果
– 包含修复建议
– 包含修复脚本
1.3 预升级工具使用
Oracle预升级工具使用:
- 升级前检查:检查数据库升级前状态
- 问题识别:识别升级前需要解决的问题
- 自动修复:自动修复部分问题
- 升级后验证:验证升级结果
- 升级后修复:修复升级后问题
Part02-生产环境规划与建议
2.1 预升级工具规划
Oracle预升级工具规划要点:
– 检查时机:确定何时运行预升级检查
– 检查范围:确定检查的范围
– 修复策略:确定修复策略
– 报告管理:确定报告管理方式
# 检查时机规划
– 升级前:升级前运行预升级检查
– 定期检查:定期运行预升级检查
– 变更前:重大变更前运行检查
– 测试环境:测试环境中运行检查
# 检查范围规划
– 数据库配置:检查数据库配置
– 组件状态:检查组件状态
– 对象状态:检查对象状态
– 参数设置:检查参数设置
– 空间使用:检查空间使用
# 修复策略规划
– 自动修复:使用自动修复脚本
– 手动修复:手动修复问题
– 分阶段修复:分阶段修复问题
– 验证修复:验证修复结果
# 报告管理规划
– 报告存储:存储检查报告
– 报告分析:分析检查报告
– 报告归档:归档检查报告
– 报告跟踪:跟踪问题修复
2.2 预升级工具场景
Oracle预升级工具场景:
- 升级前检查:升级前运行预升级检查
- 问题识别:识别升级前需要解决的问题
- 自动修复:自动修复部分问题
- 升级后验证:验证升级结果
- 升级后修复:修复升级后问题
1. 升级前检查
– 检查数据库配置
– 检查组件状态
– 检查对象状态
– 检查参数设置
– 检查空间使用
2. 问题识别
– 识别配置问题
– 识别组件问题
– 识别对象问题
– 识别参数问题
– 识别空间问题
3. 自动修复
– 自动修复配置问题
– 自动修复参数问题
– 自动修复空间问题
– 减少手动操作
– 提高升级效率
4. 升级后验证
– 验证升级结果
– 验证组件状态
– 验证对象状态
– 验证功能正常
– 验证性能正常
5. 升级后修复
– 修复升级后问题
– 修复组件问题
– 修复对象问题
– 修复参数问题
– 修复功能问题
2.3 预升级工具最佳实践
Oracle预升级工具最佳实践:
- 提前运行:提前运行预升级检查
- 仔细分析:仔细分析检查报告
- 及时修复:及时修复发现的问题
- 保存报告:保存检查报告
- 验证修复:验证修复结果
Part03-生产环境项目实施方案
3.1 预升级工具配置
3.1.1 运行预升级检查
$ 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: 5
** WARNING: OLD TIME ZONE FILE VERSION **
Database is using time zone file version 26
Target database will use time zone file version 32
** WARNING: DEPRECATED PARAMETERS **
The following parameters have been deprecated:
– cursor_sharing
– audit_trail
** WARNING: OBSOLETE PARAMETERS **
The following parameters have been removed:
– sec_case_sensitive_logon
**********************************************************************
[Pre-Upgrade Recommendations]
**********************************************************************
1. Purge DBA_RECYCLEBIN before upgrade.
The database has 100 objects in DBA_RECYCLEBIN.
Execute: PURGE DBA_RECYCLEBIN;
2. Gather dictionary statistics before upgrade.
Execute: EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
3. Update time zone file version.
Execute: @?/rdbms/admin/utltz_upgrade.sql;
**********************************************************************
[Post-Upgrade Recommendations]
**********************************************************************
1. Update COMPATIBLE parameter.
Set COMPATIBLE to 19.0.0 after upgrade.
2. Recompile invalid objects.
Execute: @?/rdbms/admin/utlrp.sql;
**********************************************************************
[Post-Upgrade Checks]
**********************************************************************
1. Verify all components are VALID.
Execute: SELECT COMP_NAME, STATUS FROM DBA_REGISTRY;
2. Verify no invalid objects.
Execute: SELECT COUNT(*) FROM DBA_OBJECTS WHERE STATUS=’INVALID’;
SQL> exit
# 2. 查看预升级检查报告
$ cat /oracle/app/oracle/cfgtoollogs/FGEDUDB/preupgrade/preupgrade.log
Pre-Upgrade generated on 2026-03-31 10:00:00
Database Name: FGEDUDB
Database Version: 12.2.0.1.0
Target Version: 19.3.0.0.0
[Pre-Upgrade Checks]
WARNING: TBD/INVALID OBJECTS FOUND
The database contains TBD/INVALID objects.
Number of Invalid Objects: 5
Action: Recompile invalid objects before upgrade.
WARNING: OLD TIME ZONE FILE VERSION
Database is using time zone file version 26
Target database will use time zone file version 32
Action: Update time zone file version before or after upgrade.
WARNING: DEPRECATED PARAMETERS
The following parameters have been deprecated:
– cursor_sharing
– audit_trail
Action: Review and update deprecated parameters.
WARNING: OBSOLETE PARAMETERS
The following parameters have been removed:
– sec_case_sensitive_logon
Action: Remove obsolete parameters from parameter file.
[Pre-Upgrade Recommendations]
1. Purge DBA_RECYCLEBIN before upgrade.
The database has 100 objects in DBA_RECYCLEBIN.
Execute: PURGE DBA_RECYCLEBIN;
2. Gather dictionary statistics before upgrade.
Execute: EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
3. Update time zone file version.
Execute: @?/rdbms/admin/utltz_upgrade.sql;
[Post-Upgrade Recommendations]
1. Update COMPATIBLE parameter.
Set COMPATIBLE to 19.0.0 after upgrade.
2. Recompile invalid objects.
Execute: @?/rdbms/admin/utlrp.sql;
[Post-Upgrade Checks]
1. Verify all components are VALID.
Execute: SELECT COMP_NAME, STATUS FROM DBA_REGISTRY;
2. Verify no invalid objects.
Execute: SELECT COUNT(*) FROM DBA_OBJECTS WHERE STATUS=’INVALID’;
# 3. 执行预升级修复脚本
$ sqlplus / as sysdba @preupgrade_fixups.sql
Executing Pre-Upgrade Fixup Scripts…
***************************************************************************
**********************************************************************
[Pre-Upgrade Fixup Scripts]
**********************************************************************
Fixup 1: Purge DBA_RECYCLEBIN
Executing: PURGE DBA_RECYCLEBIN;
Result: SUCCESS
Fixup 2: Gather Dictionary Statistics
Executing: EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
Result: SUCCESS
Fixup 3: Compile Invalid Objects
Executing: @?/rdbms/admin/utlrp.sql;
Result: SUCCESS
SQL> exit
# 4. 手动修复其他问题
# 4.1 更新时区文件版本
SQL> @?/rdbms/admin/utltz_upgrade.sql
Session altered.
INFO: Starting time zone file upgrade.
INFO: Upgrading time zone file from version 26 to version 32.
PL/SQL procedure successfully completed.
INFO: Time zone file upgrade completed.
SQL> shutdown immediate;
SQL> startup;
# 4.2 移除废弃参数
SQL> create pfile=’/tmp/initFGEDUDB.ora’ from spfile;
File created.
# 编辑pfile,移除废弃参数
$ vi /tmp/initFGEDUDB.ora
# 移除 sec_case_sensitive_logon 参数
SQL> shutdown immediate;
SQL> startup pfile=’/tmp/initFGEDUDB.ora’;
SQL> create spfile from pfile=’/tmp/initFGEDUDB.ora’;
SQL> shutdown immediate;
SQL> startup;
# 5. 验证预升级修复
$ sqlplus / as sysdba @preupgrd.sql
Loading Pre-Upgrade Package…
***************************************************************************
Executing Pre-Upgrade Checks in FGEDUDB…
***************************************************************************
**********************************************************************
[Pre-Upgrade Checks]
**********************************************************************
All checks passed successfully.
**********************************************************************
[Pre-Upgrade Recommendations]
**********************************************************************
No recommendations.
**********************************************************************
[Post-Upgrade Recommendations]
**********************************************************************
1. Update COMPATIBLE parameter.
Set COMPATIBLE to 19.0.0 after upgrade.
2. Recompile invalid objects.
Execute: @?/rdbms/admin/utlrp.sql;
SQL> exit
3.1.2 升级后检查
$ sqlplus / as sysdba @?/rdbms/admin/utlu122s.sql
Oracle Database 19c Post-Upgrade Status Tool 03-31-2026 10:00: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
Oracle Real Application Testing VALID 19.3.0.0.0 00:00:30
Oracle Workspace Manager VALID 19.3.0.0.0 00:00:30
Oracle Text VALID 19.3.0.0.0 00:01:00
Oracle XML Database VALID 19.3.0.0.0 00:01:00
Oracle Multimedia VALID 19.3.0.0.0 00:01:00
Spatial VALID 19.3.0.0.0 00:02:00
.
Total Upgrade Time: 00:25:00
.
PL/SQL procedure successfully completed.
# 2. 运行升级后修复脚本
$ sqlplus / as sysdba @?/rdbms/admin/postupgrade_fixups.sql
Executing Post-Upgrade Fixup Scripts…
***************************************************************************
**********************************************************************
[Post-Upgrade Fixup Scripts]
**********************************************************************
Fixup 1: Recompile Invalid Objects
Executing: @?/rdbms/admin/utlrp.sql;
Result: SUCCESS
Fixup 2: Update COMPATIBLE Parameter
Current COMPATIBLE: 12.2.0
Recommended COMPATIBLE: 19.0.0
Action: Update COMPATIBLE parameter manually
SQL> exit
# 3. 更新COMPATIBLE参数
SQL> alter system set compatible = ‘19.0.0’ scope=spfile;
System altered.
SQL> shutdown immediate;
SQL> startup;
# 4. 验证升级结果
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
Oracle Real Application Testing 19.3.0.0.0 VALID
Oracle Workspace Manager 19.3.0.0.0 VALID
Oracle Text 19.3.0.0.0 VALID
Oracle XML Database 19.3.0.0.0 VALID
Oracle Multimedia 19.3.0.0.0 VALID
Spatial 19.3.0.0.0 VALID
10 rows selected.
SQL> select count(*) from dba_objects where status = ‘INVALID’;
COUNT(*)
———-
0
3.2 预升级工具监控
3.2.1 配置预升级工具监控脚本
$ vi /home/oracle/scripts/monitor_preupgrade.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/preupgrade_monitor”
mkdir -p $LOG_DIR
DATE=$(date +%Y%m%d)
LOG_FILE=”$LOG_DIR/preupgrade_monitor_$DATE.log”
echo “$(date): Starting preupgrade monitor…” > $LOG_FILE
# 检查预升级状态
sqlplus -s / as sysdba <
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, value from v\$parameter where name in (‘compatible’, ‘cpu_count’, ‘sga_target’, ‘pga_aggregate_target’);
exit
EOF
echo “$(date): Preupgrade monitor completed.” >> $LOG_FILE
# 发送报告
mail -s “Preupgrade Monitor Report – $DATE” admin@fgedu.net.cn < $LOG_FILE
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/monitor_preupgrade.sh
# 3. 测试脚本
$ /home/oracle/scripts/monitor_preupgrade.sh
# 4. 设置定期监控
$ crontab -e
# 每小时监控预升级状态
0 * * * * /home/oracle/scripts/monitor_preupgrade.sh >> /home/oracle/preupgrade_monitor/cron.log 2>&1
3.3 预升级工具故障处理
3.3.1 预升级工具常见问题
# 错误信息
ERROR: Pre-upgrade check failed
# 解决方案
# 1. 查看预升级日志
$ cat /oracle/app/oracle/cfgtoollogs/FGEDUDB/preupgrade/preupgrade.log
# 2. 检查数据库状态
SQL> select status from v$instance;
# 3. 检查组件状态
SQL> select comp_name, status from dba_registry;
# 4. 修复问题后重新运行
$ sqlplus / as sysdba @preupgrd.sql
# 问题2:预升级修复失败
# 错误信息
ERROR: Pre-upgrade fixup failed
# 解决方案
# 1. 查看修复日志
$ cat /oracle/app/oracle/cfgtoollogs/FGEDUDB/preupgrade/preupgrade_fixups.log
# 2. 手动修复问题
SQL> PURGE DBA_RECYCLEBIN;
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
# 3. 重新运行修复脚本
$ sqlplus / as sysdba @preupgrade_fixups.sql
# 问题3:时区文件版本不匹配
# 错误信息
WARNING: OLD TIME ZONE FILE VERSION
# 解决方案
# 1. 检查当前时区文件版本
SQL> select * from v$timezone_file;
# 2. 升级时区文件
SQL> @?/rdbms/admin/utltz_upgrade.sql;
# 3. 重启数据库
SQL> shutdown immediate;
SQL> startup;
# 4. 验证时区文件版本
SQL> select * from v$timezone_file;
Part04-生产案例与实战讲解
4.1 预升级工具案例
在生产环境中使用预升级工具的完整案例:
4.1.1 场景描述
某企业需要将Oracle数据库从12.2升级到19c,需要使用预升级工具进行检查。
4.1.2 分析步骤
$ vi /home/oracle/scripts/auto_preupgrade.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/preupgrade”
mkdir -p $LOG_DIR
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE=”$LOG_DIR/preupgrade_$DATE.log”
echo “========================================” > $LOG_FILE
echo “Pre-Upgrade Check 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 “Verifying pre-upgrade results…” >> $LOG_FILE
sqlplus -s / as sysdba <
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 “Pre-upgrade check completed at $(date)” >> $LOG_FILE
# 发送报告
mail -s “Pre-Upgrade Check Report – $DATE” admin@fgedu.net.cn < $LOG_FILE
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/auto_preupgrade.sh
# 3. 测试脚本
$ /home/oracle/scripts/auto_preupgrade.sh
4.2 预升级工具故障处理
在预升级工具故障处理过程中的方法和技巧:
4.2.1 故障处理流程
# 1. 识别问题
# – 查看预升级日志
# – 查看检查报告
# – 检查数据库状态
# 2. 收集信息
# – 收集错误信息
# – 收集诊断数据
# – 收集系统信息
# 3. 分析原因
# – 分析错误原因
# – 分析配置问题
# – 分析组件问题
# 4. 制定方案
# – 制定修复方案
# – 制定预防措施
# – 制定验证方案
# 5. 执行修复
# – 执行修复操作
# – 验证修复结果
# – 记录修复过程
# 示例:处理预升级检查失败
# 1. 识别问题
$ cat /oracle/app/oracle/cfgtoollogs/FGEDUDB/preupgrade/preupgrade.log
# 2. 收集信息
SQL> select * from dba_registry;
# 3. 分析原因
— 组件状态无效
# 4. 制定方案
— 重新编译无效对象
# 5. 执行修复
SQL> @?/rdbms/admin/utlrp.sql;
4.3 预升级工具优化
优化预升级工具配置的最佳实践:
4.3.1 优化预升级工具管理
SQL> create or replace procedure manage_preupgrade_results(
p_check_date in date,
p_total_issues in number,
p_fixed_issues in number,
p_check_status in varchar2
) as
begin
dbms_output.put_line(‘— Pre-Upgrade Results Management —‘);
dbms_output.put_line(‘Check Date: ‘ || to_char(p_check_date, ‘YYYY-MM-DD HH24:MI:SS’));
dbms_output.put_line(‘Total Issues: ‘ || p_total_issues);
dbms_output.put_line(‘Fixed Issues: ‘ || p_fixed_issues);
dbms_output.put_line(‘Check Status: ‘ || p_check_status);
— 可以扩展为记录到表中
end manage_preupgrade_results;
/
Procedure created.
# 2. 执行管理存储过程
SQL> set serveroutput on
SQL> exec manage_preupgrade_results(sysdate, 5, 5, ‘SUCCESS’);
— Pre-Upgrade Results Management —
Check Date: 2026-03-31 10:00:00
Total Issues: 5
Fixed Issues: 5
Check Status: SUCCESS
PL/SQL procedure successfully completed.
# 3. 创建预升级工具历史表
SQL> create table preupgrade_history (
id number primary key,
check_date date,
total_issues number,
fixed_issues number,
check_status varchar2(50),
report_file varchar2(4000),
notes varchar2(4000)
);
Table created.
SQL> create sequence preupgrade_history_seq;
Sequence created.
# 4. 记录检查历史
SQL> insert into preupgrade_history values (
preupgrade_history_seq.nextval,
sysdate,
5,
5,
‘SUCCESS’,
‘/oracle/app/oracle/cfgtoollogs/FGEDUDB/preupgrade/preupgrade.log’,
‘Pre-upgrade check for 12.2 to 19c’
);
1 row created.
SQL> commit;
Commit complete.
# 5. 查看检查历史趋势
SQL> column check_date format a20
SQL> select check_date, total_issues, fixed_issues, check_status
from preupgrade_history
order by check_date desc
fetch first 12 rows only;
CHECK_DATE TOTAL_ISSUES FIXED_ISSUES CHECK_STATUS
——————– ———— ———— —————
2026-03-31 10:00:00 5 5 SUCCESS
2026-03-30 10:00:00 8 8 SUCCESS
2026-03-29 10:00:00 10 10 SUCCESS
Part05-风哥经验总结与分享
5.1 预升级工具总结
Oracle预升级工具是确保升级顺利进行的重要工具,具有以下特点:
- 检查全面:检查数据库升级前的各种状态
- 报告详细:生成详细的检查报告
- 建议明确:提供明确的修复建议
- 自动修复:提供自动修复脚本
- 支持多种版本:支持多种Oracle版本升级
5.2 预升级工具检查清单
Oracle预升级工具检查清单:
- 提前运行:提前运行预升级检查
- 仔细分析:仔细分析检查报告
- 及时修复:及时修复发现的问题
- 保存报告:保存检查报告
- 验证修复:验证修复结果
- 定期检查:定期运行预升级检查
5.3 预升级工具工具推荐
Oracle预升级工具工具推荐:
- preupgrd.sql:预升级检查脚本
- preupgrade_fixups.sql:预升级修复脚本
- utlu122s.sql:升级后检查脚本
- postupgrade_fixups.sql:升级后修复脚本
- Shell脚本:自动化检查过程
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
