首页 文章详情

手把手教你 Oracle 数据库升级!

杰哥的IT之旅 | 79 2021-06-08 00:44 0 0 0

转载请注明以下内容:
来源:公众号【杰哥的IT之旅】
作者:三笠
ID:Jake_Internet

前言

在上一篇《手把手教你在 Linux 环境下部署 Oracle 数据库!》文章中,有读者说:杰哥真周到,不过这篇文章从前期的安装环境开始比较简单,相信能对一些 Oracle 初学者参考把基础的环境给搭建起来才能顺利进行后期的一些事情。

那么我们有了第一版环境的出现就会面临着版本的迭代与升级,这篇文章就带领大家一步步的 Oracle 升级,希望能对你有所帮助。

一、环境准备

本次测试尽量按照生产环境升级进行模拟,故而使用2台主机进行测试:

节点主机版主机名实例名Oracle版本IP地址
源库redhat 6.9luciferlucifer11204(未安装补丁)10.211.55.110
目标库redhat 7.9cdb19c
19.3.0(补丁 29585399)10.211.55.102

注意:源库为生产环境 linux 6系统,目标库为升级环境,由于 19C 无法安装在 linux 6系统,故而选择异机升级,保留生产环境用于失败回退。

根据 MOS 文档 2485457.1 可以获取最新版 AutoUpgrade 工具下载地址:

The most recent version of AutoUpgrade can be downloaded via this link: version:https://login.oracle.com/mysso/signon.jsp

二、升级前准备

由于 AutoUpgrade 工具需要 JDK 版本 1.8 以上,11GR2 的 jdk 版本为 1.5 不支持,所以使用 19C 的 ORACLE_HOME 中 JDK 版本。

拷贝 19C 的 jdk 到源库:

scp -r $ORACLE_HOME/jdk/ 10.211.55.110:/soft/

1、设置 JAVA 环境变量

##使用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


2、源端创建并编辑config文件

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


3、升级前源库进行分析检查

java -jar /soft/autoupgrade.jar -config /soft/config.cfg -mode analyze


Notes:可以通过 lsj 命令查看当前JOB的运行情况。

可以通过网页查看检查情况:

cd /soft/logs
python -m SimpleHTTPServer 8000

网页访问 

http://10.211.55.110:8000/lucifer/100/prechecks/lucifer_preupgrade.html:

4、升级前源库执行修复脚本

java -jar /soft/autoupgrade.jar -config /soft/config.cfg -mode fixups


Notes:可以通过 status -job 101 命令查看当前JOB的运行情况。

三、正式升级

1、关闭源库

sqlplus / as sysdba
shutdown immediate


2、拷贝源库数据文件,日志文件,参数文件,密码文件到目标端,均在源端操作

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

3、目标库打开实例到upgrade模式,均在目标端操作

##创建文件夹
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

环境变量:

################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


4、目标端创建并编辑config文件

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


Notes:源端目录可以随意填写一个目录,例如:/tmp。

5、目标端执行升级操作(upgrade模式)

java -jar /soft/autoupgrade.jar -config /soft/config.cfg -mode upgrade


6、监控升级情况

通过python来创建一个HTTPServer网页来监控升级情况:

cd /soft/upg_logs/cfgtoollogs/upgrade/auto
python -m SimpleHTTPServer 8000

打开网页,输入:http://10.211.55.102:8000/state.html,网页会自动刷新执行情况:

等待升级完成即可。

至此,AutoUpgrade工具升级结束。

四、升级后处理

1、配置sqlnet.ora

cd $TNS_ADMIN
cat <<EOF >>sqlnet.ora
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
EOF


2、检查所有组件

select substr(comp_id,1,15) comp_id,substr(comp_name,1,30) comp_name,substr(version,1,10version,status
from dba_registry 
order by modified;


五、升级为PDB并且插入CDB

通过以上操作可以异机升级数据库,但是只升级到NON-CDB模式。那么如何直接升级成PDB呢?

1、目标端需要创建CDB模式的数据库实例。

2、使用刚刚升级成功的lucifer作为源端进行转pdb。

3、目标端创建并编辑config文件

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


4、目标端执行升级操作(deploy模式)

java -jar /soft/autoupgrade.jar -config /soft/config.cfg -mode deploy


等待转换完毕。

5、升级后检查

参考链接:

https://mikedietrichde.com/2020/08/03/oracle-autoupgrade-between-two-servers/

https://mikedietrichde.com/2020/08/04/oracle-autoupgrade-between-two-servers-and-plugin/

https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/examples-of-autoupgrade-workflows.html#GUID-6A4B79EB-2CE6-44FF-8FF4-C67B09D82F12

10分钟!一键部署Oracle 11GR2单机

https://blog.csdn.net/m0_50546016/article/details/116503394

30分钟!一键部署Oracle 19C单机CDB+PDB

https://blog.csdn.net/m0_50546016/article/details/116524049

推荐阅读

手把手教你在 Linux 环境下部署 Oracle 数据库!

Oracle客户端PLSQL的使用说明

Linux环境下Oracle数据库常用命令

Linux-Ubuntu 18.04 LTS 安装 Oracle VirtualBox

最后

本文是读者:三笠在 CSDN 平台创作的一篇文章,写的非常详细,欢迎大家关注。

博客地址:https://blog.csdn.net/m0_50546016(点击文末左侧的阅读原文可直达,或 PC 端访问)

原创不易,如果你觉得这篇文章对你有点用的话,麻烦你为本文点个赞、在看、留言或转发一下,因为这将是我输出更多优质文章的动力,感谢!我们下期再见!


杰哥的另一个公众号,主要分享关于个人成长经历的那点事,欢迎您的关注。

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter