本文给出了一个将数据库发布更新(RU)应用于简单单实例ORACLE数据库的现有ORACLE_HOME的示例。
在进行任何修补之前,应始终检查修补程序注释。始终有可能引入了一些更改,使过程与此处介绍的不同。
-
假设
-
环境
-
应用修补程序
-
清理
-
检查修补程序历史记录
-
回滚修补程序
-
利弊
相关文章:
- 修补:将版本更新(RU)应用于新的ORACLE_HOME
假设
本文做了一些假设。
-
我们有一个现有的Oracle 19c或21c数据库。
-
我们有数据库和ORACLE_HOME的备份。我们正在将修补程序应用于现有的ORACLE_HOME,因此如果出现无法通过回滚修补程序修复的问题,我们需要一种方法来回退。
-
我们已经下载了本季度的相关OPatch和补丁文件,如下所示。
环境
设置环境。这包括OPatch和修补程序文件名以及路径。请注意OPatch是如何添加到PATH环境变量的。
export SOFTWARE_DIR=/u01/software # 19c export OPATCH_FILE="p6880880_190000_Linux-x86-64.zip" export PATCH_FILE="p34133642_190000_Linux-x86-64.zip" export PATCH_TOP=${SOFTWARE_DIR}/34133642 # 21c export OPATCH_FILE="p6880880_210000_Linux-x86-64.zip" export PATCH_FILE="p34160444_210000_Linux-x86-64.zip" export PATCH_TOP=${SOFTWARE_DIR}/34160444 export PATH=${ORACLE_HOME}/OPatch:${PATH} export ORACLE_SID=cdb1 export ORAENV_ASK=NO . oraenv export ORAENV_ASK=YES
复制
应用修补程序
保留现有OPatch的副本,并解压缩最新版本的OPatch。
cd ${ORACLE_HOME} mv OPatch OPatch.`date +"%Y"-"%m"-"%d"` unzip -oq ${SOFTWARE_DIR}/${OPATCH_FILE}
复制
解压缩修补程序软件。
cd ${SOFTWARE_DIR} unzip -oq ${PATCH_FILE}
复制
关闭从ORACLE_HOME运行的服务。
dbshut ${ORACLE_HOME}
复制
应用修补程序。
cd ${PATCH_TOP} opatch prereq CheckConflictAgainstOHWithDetail -ph ./ opatch apply -silent
复制
启动侦听器。
lsnrctl start
复制
启动数据库,确保所有可插入的数据库都已打开。
sqlplus / as sysdba <<EOF startup; alter pluggable database all open; exit; EOF
复制
运行datapatch。
cd $ORACLE_HOME/OPatch ./datapatch -verbose
复制
重新编译所有无效对象。
$ORACLE_HOME/perl/bin/perl \ -I$ORACLE_HOME/perl/lib \ -I$ORACLE_HOME/rdbms/admin \ $ORACLE_HOME/rdbms/admin/catcon.pl \ -l /tmp/ \ -b postpatch_${ORACLE_SID}_recompile \ -C 'PDB$SEED' \ $ORACLE_HOME/rdbms/admin/utlrp.sql
复制
清理
清理修补程序软件。
cd ${SOFTWARE_DIR} rm -Rf ${PATCH_TOP} rm -Rf ${OPATCH_FILE} rm -Rf ${PATCH_FILE} rm -Rf PatchSearch.xml
复制
检查修补程序历史记录
我们可以通过运行以下命令来检查修补程序历史记录。
opatch lsinventory
复制
回滚修补程序
关闭从ORACLE_HOME运行的服务。
dbshut ${ORACLE_HOME}
复制
回滚修补程序。
# 19c opatch rollback -id 34133642 -silent # 21c opatch rollback -id 34160444 -silent
复制
启动侦听器。
lsnrctl start
复制
启动数据库,确保所有可插入的数据库都已打开。
sqlplus / as sysdba <<EOF startup; alter pluggable database all open; exit; EOF
复制
运行datapatch。
cd $ORACLE_HOME/OPatch ./datapatch -verbose
复制
重新编译所有无效对象。
$ORACLE_HOME/perl/bin/perl \ -I$ORACLE_HOME/perl/lib \ -I$ORACLE_HOME/rdbms/admin \ $ORACLE_HOME/rdbms/admin/catcon.pl \ -l /tmp/ \ -b postpatch_${ORACLE_SID}_recompile \ -C 'PDB$SEED' \ $ORACLE_HOME/rdbms/admin/utlrp.sql
复制
利弊
好处:
-
我们没有额外的ORACLE_HOME,因此这减少了完成修补所需的空间。
-
由于ORACLE_HOME没有改变,我们不需要担心更改任何配置文件以指向新的主页。
弊端:
-
修补现有的ORACLE_HOME需要更多的停机时间,因为修补家庭时服务必须脱机。
-
如果出现无法通过回滚修补程序修复的错误,我们可能需要从备份中恢复ORACLE_HOME以恢复原始运行实例。
-
必须同时修补在ORACLE_HOME下运行的所有数据库。
有关详细信息,请参见:
-
关键修补程序更新、安全警报和公告
-
修补:将版本更新(RU)应用于新的ORACLE_HOME
希望这能有所帮助。
原文标题:Patching : Apply a Database Release Update (RU) to an Existing ORACLE_HOME
原文链接:https://oracle-base.com/articles/misc/apply-db-release-update-to-an-existing-oracle-home