目录
前言
Oralce 19C 版本已经趋于成熟,而 11GR2 版本Oracle已经在 2020 年停止支持,意味着不再更新 bug 补丁。因此,升级 19C 是未来的大趋势,本文就来讲解下 Oracle 如何快速安装的升级到 19C 版本。

根据上图所示介绍,Oracle 推出一种新的升级方式,升级过程简单且非常高效!
一、环境准备
安装测试环境可以使用博主编写的 Oracle 一键安装脚本,同时支持单机和 RAC 集群模式!
开源项目:Install Oracle Database By Scripts!
本次测试尽量按照生产环境升级进行模拟,故而使用2台主机进行测试:
| 节点 |
主机版本 |
主机名 |
实例名 |
Oracle版本 |
IP地址 |
| 源库 |
RHEL6.9 |
lucifer |
lucifer |
11204(无补丁) |
10.211.55.110 |
| 目标库 |
RHEL7.9 |
cdb19c |
|
19110(补丁:29585399) |
10.211.55.102 |
📢 注意: 源库为生产环境 Linux 6 版本系统,目标库为升级环境,由于 19C 无法安装在 Linux 6 版本系统,因此选择异机升级,保留生产环境用于失败回退。
AutoUpgrade 工具:
根据 MOS文档 2485457.1 可以获取最新版AutoUpgrade工具下载地址:
The most recent version of AutoUpgrade can be downloaded via this link: version 20210421.
二、升级前准备
拷贝19C 的 jdk 到源库:
1 2 3 4 5
| scp -r $ORACLE_HOME/jdk/ 10.211.55.110:/soft/
AI写代码bash
* 1
|
📢 注意: AutoUpgrade 工具需要JDK版本 1.8 以上,11GR2 的 jdk 版本为 1.5 不支持,因此需要使用 19C 的 ORACLE_HOME 中 JDK 版本。
1、设置JAVA环境变量
Oracle 用户下 java 环境变量配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| ##使用19c环境的ORACLE_HOME JDK su - oracle cat<<EOF >>/home/oracle/.bash_profile export JAVA_HOME=/soft/jdk/bin export PATH=/soft/jdk/bin:\$PATH EOF
source /home/oracle/.bash_profile
java -version java -jar /soft/autoupgrade.jar -version
AI写代码bash
|
2、源端创建并编辑config文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| java -jar /soft/autoupgrade.jar -create_sample_file config /soft/config.cfg
##参照生成的config文件,编写config mkdir /soft/upg_logs /soft/logs cat<<EOF >/soft/config.cfg global.autoupg_log_dir=/soft/upg_logs # # Database number 1 # upg1.dbname=lucifer upg1.start_time=NOW upg1.source_home=/u01/app/oracle/product/11.2.0/db upg1.target_home=/u01/app/oracle/product/19.3.0/db upg1.sid=lucifer upg1.log_dir=/soft/logs upg1.upgrade_node=localhost upg1.target_version=19 upg1.restoration=no EOF
chown -R oracle:oinstall /soft
AI写代码bash
|
3、升级前源库进行分析检查
1 2 3 4 5
| java -jar /soft/autoupgrade.jar -config /soft/config.cfg -mode analyze
AI写代码bash
* 1
|
📢 注意: 可以通过 lsj 命令查看当前JOB的运行情况。
可以通过网页查看检查情况:
1 2 3 4 5 6 7
| cd /soft/logs python -m SimpleHTTPServer 8000
AI写代码bash
|
打开网页访问 http://10.211.55.110:8000/lucifer/100/prechecks/lucifer_preupgrade.html

4、升级前源库执行修复脚本
1 2 3 4 5
| java -jar /soft/autoupgrade.jar -config /soft/config.cfg -mode fixups
AI写代码bash
* 1
|
📢 注意: 可以通过 status -job 101 命令查看当前JOB的运行情况。
三、正式升级
1、关闭源库
1 2 3 4 5 6 7
| sqlplus / as sysdba shutdown immediate
AI写代码bash
|
2、拷贝源库数据文件,日志文件,参数文件,密码文件到目标端,均在源端操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| su - oracle
scp -r /oradata/lucifer/ 10.211.55.102:/oradata scp -r /u01/app/oracle/fast_recovery_area/lucifer/control02.ctl 10.211.55.102:/oradata/lucifer
scp spfilelucifer.ora 10.211.55.102:/u01/app/oracle/product/19.3.0/db/dbs
scp orapwlucifer 10.211.55.102:/u01/app/oracle/product/19.3.0/db/dbs
AI写代码bash
* 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8
|
3、目标库打开实例到upgrade模式,均在目标端操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| ##创建文件夹 mkdir -p /u01/app/oracle/admin/lucifer/adump mkdir -p /u01/app/oracle/fast_recovery_area/lucifer
mv /oradata/lucifer/control02.ctl /u01/app/oracle/fast_recovery_area/lucifer/control02.ctl
##/etc/oratab增加oracle_sid cat <<EOF >>/etc/oratab lucifer:/u01/app/oracle/product/19.3.0/db:Y EOF
su - oracle ##替换环境变量或者设置ORACLE_SID export ORACLE_SID=lucifer sqlplus / as sysdba startup upgrade
AI写代码bash
|
Oracle环境变量如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| ################OracleBegin######################### umask 022 export TMP=/tmp export TMPDIR=$TMP export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 #AL32UTF8,ZHS16GBK export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/19.3.0/db export ORACLE_HOSTNAME=cdb19c export ORACLE_TERM=xterm export TNS_ADMIN=$ORACLE_HOME/network/admin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export ORACLE_SID=lucifer export PATH=/usr/sbin:$PATH export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH alias sas='sqlplus / as sysdba' alias alert='tail -500f $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace/alert_$ORACLE_SID.log|more' export PS1="[`whoami`@`hostname`:"'$PWD]$ ' alias sqlplus='rlwrap sqlplus' alias rman='rlwrap rman' alias lsnrctl='rlwrap lsnrctl' alias asmcmd='rlwrap asmcmd' alias adrci='rlwrap adrci' alias ggsci='rlwrap ggsci' alias dgmgrl='rlwrap dgmgrl' ################OracleEnd########################### export JAVA_HOME=$ORACLE_HOME/jdk/bin export PATH=$ORACLE_HOME/jdk/bin:$PATH
AI写代码bash
* 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17 * 18 * 19 * 20 * 21 * 22 * 23 * 24 * 25 * 26 * 27
|
4、目标端创建并编辑config文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| java -jar /soft/autoupgrade.jar -create_sample_file config /soft/config.cfg
##参照生成的config文件,编写config mkdir /soft/upg_logs /soft/logs cat<<EOF >/soft/config.cfg global.autoupg_log_dir=/soft/upg_logs upg1.dbname=lucifer upg1.start_time=NOW upg1.source_home=/tmp upg1.target_home=/u01/app/oracle/product/19.3.0/db upg1.sid=lucifer upg1.log_dir=/soft/logs upg1.upgrade_node=localhost upg1.target_version=19 upg1.restoration=no EOF
chown -R oracle:oinstall /soft
AI写代码bash
|

📢 注意: 源端目录可以随意填写一个目录,例如:/tmp。
5、目标端执行升级操作(upgrade模式)
1 2 3 4 5
| java -jar /soft/autoupgrade.jar -config /soft/config.cfg -mode upgrade
AI写代码bash
* 1
|

6、监控升级情况
通过python来创建一个HTTPServer网页来监控升级情况:
1 2 3 4 5 6 7
| cd /soft/upg_logs/cfgtoollogs/upgrade/auto python -m SimpleHTTPServer 8000
AI写代码bash
|
打开网页访问:http://10.211.55.102:8000/state.html,网页会自动刷新执行情况:

等待升级完成即可!


至此,AutoUpgrade工具升级结束。
四、升级后处理
1 配置sqlnet.ora
1 2 3 4 5 6 7 8 9 10 11 12 13
| cd $TNS_ADMIN cat <<EOF >>sqlnet.ora SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8 SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 EOF
AI写代码bash
|
2 检查所有组件
1 2 3 4 5 6 7 8 9
| select substr(comp_id,1,15) comp_id,substr(comp_name,1,30) comp_name,substr(version,1,10) version,status from dba_registry order by modified;
AI写代码bash
|
五、升级为PDB并且插入CDB
通过以上操作可以异机升级数据库,但是只升级到NON-CDB模式。那么如何直接升级成PDB呢?

1、目标端需要创建CDB模式的数据库实例
2、使用刚刚升级成功的lucifer作为源端进行转pdb
目标端创建并编辑config文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| java -jar /soft/autoupgrade.jar -create_sample_file config /soft/config.cfg
##参照生成的config文件,编写config mkdir /soft/upg_logs /soft/logs rm -rf /soft/upg_logs/* rm -rf /soft/logs/*
cat<<EOF >/soft/config.cfg global.autoupg_log_dir=/soft/upg_logs upg1.dbname=lucifer upg1.start_time=NOW upg1.source_home=/u01/app/oracle/product/19.3.0/db upg1.target_home=/u01/app/oracle/product/19.3.0/db upg1.sid=lucifer upg1.log_dir=/soft/logs upg1.upgrade_node=localhost upg1.target_version=19 upg1.restoration=no upg1.target_cdb=cdb19c upg1.target_pdb_name=lucifer upg3.target_pdb_copy_option=file_name_convert=('/oradata/lucifer/', '/oradata/CDB19C/lucifer/') EOF
chown -R oracle:oinstall /soft
AI写代码bash
* 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17 * 18 * 19 * 20 * 21 * 22 * 23 * 24
|
目标端执行升级操作(deploy模式):
1 2 3 4 5
| java -jar /soft/autoupgrade.jar -config /soft/config.cfg -mode deploy
AI写代码bash
* 1
|


等待转换完毕:


升级后检查:

至此,完整的升级流程已经演示结束,希望能够帮助到。
参考文档: