本文给出了一个将数据库发布更新(RU)应用于简单单实例ORACLE数据库的新ORACLE_HOME的示例。
在进行任何修补之前,应始终检查修补程序注释。始终有可能引入了一些更改,使过程与此处介绍的不同。
-
假设
-
环境
-
创建新的ORACLE_HOME
-
修补数据库
-
清理
-
检查修补程序历史记录
-
回滚修补程序
-
利弊
相关文章:
修补:将版本更新(RU)应用于现有ORACLE_HOME
假设
本文做了一些假设。
-
我们有一个现有的Oracle 19c或21c数据库。
-
我们有一个数据库备份,以防出现任何问题。
-
我们有Oracle数据库软件的基本版本,可以创建新的Oracle_HOME。
-
我们已经下载了本季度的相关OPatch和补丁文件,如下所示。
环境
设置环境。这包括数据库软件、OPatch和修补程序文件名以及路径。
export ORA_INVENTORY=/u01/app/oraInventory export ORACLE_BASE=/u01/app/oracle export SOFTWARE_DIR=/u01/software # 19c export OLD_ORACLE_HOME=${ORACLE_BASE}/product/19.0.0/dbhome_1 export NEW_ORACLE_HOME=${ORACLE_BASE}/product/19.16.0/dbhome_1 export DB_SOFTWARE="LINUX.X64_193000_db_home.zip" 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 OLD_ORACLE_HOME=${ORACLE_BASE}/product/21.0.0/dbhome_1 export NEW_ORACLE_HOME=${ORACLE_BASE}/product/21.7.0/dbhome_1 export DB_SOFTWARE="LINUX.X64_213000_db_home.zip" export OPATCH_FILE="p6880880_210000_Linux-x86-64.zip" export PATCH_FILE="p34160444_210000_Linux-x86-64.zip" export PATCH_TOP=${SOFTWARE_DIR}/34160444
复制
创建新的ORACLE_HOME
我们通过只安装软件来创建一个新的ORACLE_HOME。创建新的ORACLE_HOME并将基本软件解压缩到其中。
mkdir -p ${NEW_ORACLE_HOME} cd ${NEW_ORACLE_HOME} unzip -oq ${SOFTWARE_DIR}/${DB_SOFTWARE}
复制
在新家中更新OPatch。
cd ${NEW_ORACLE_HOME} rm -Rf OPatch unzip -oq ${SOFTWARE_DIR}/${OPATCH_FILE}
复制
解压缩版本更新。
cd ${SOFTWARE_DIR} unzip -oq ${PATCH_FILE}
复制
在新家中安装Oracle软件,在安装过程中应用RU。注意,我们在runInstaller命令中引用了NEW_ORACLE_HOME位置,为了安全起见,我们取消了ORACLE_ HOME变量的设置。
unset ORACLE_HOME cd ${NEW_ORACLE_HOME} ${NEW_ORACLE_HOME}/runInstaller -ignorePrereq -waitforcompletion -silent \ -applyRU ${PATCH_TOP} \ -responseFile ${NEW_ORACLE_HOME}/install/response/db_install.rsp \ oracle.install.option=INSTALL_DB_SWONLY \ ORACLE_HOSTNAME=${ORACLE_HOSTNAME} \ UNIX_GROUP_NAME=oinstall \ INVENTORY_LOCATION=${ORA_INVENTORY} \ SELECTED_LANGUAGES=en,en_GB \ ORACLE_HOME=${NEW_ORACLE_HOME} \ ORACLE_BASE=${ORACLE_BASE} \ oracle.install.db.InstallEdition=EE \ oracle.install.db.OSDBA_GROUP=dba \ oracle.install.db.OSBACKUPDBA_GROUP=dba \ oracle.install.db.OSDGDBA_GROUP=dba \ oracle.install.db.OSKMDBA_GROUP=dba \ oracle.install.db.OSRACDBA_GROUP=dba \ SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \ DECLINE_SECURITY_UPDATES=true
复制
按照说明运行根脚本。
# 19c As a root user, execute the following script(s): 1. /u01/app/oracle/product/19.16.0/dbhome_1/root.sh # 21c As a root user, execute the following script(s): 1. /u01/app/oracle/product/21.7.0/dbhome_1/root.sh
复制
我们现在有了新的补丁主页,所以我们准备修补数据库。
修补数据库
要修补数据库,我们需要将其切换到新的ORACLE_HOME并以正常方式运行数据修补实用程序。
关闭当前ORACLE_HOME中的所有服务。
export ORACLE_SID=cdb1 export ORAENV_ASK=NO . oraenv export ORAENV_ASK=YES dbshut ${ORACLE_HOME}
复制
编辑“/etc/oratab”文件,设置实例的新主页。
# 19c #cdb1:/u01/app/oracle/product/19.0.0/dbhome_1:Y cdb1:/u01/app/oracle/product/19.16.0/dbhome_1:Y # 21c #cdb1:/u01/app/oracle/product/21.0.0/dbhome_1:Y cdb1:/u01/app/oracle/product/21.7.0/dbhome_1:Y
复制
在以前的版本中,我们需要在主文件之间复制以下文件,但在21世纪以后,这是不必要的,因为我们使用的是只读主文件,所以所有配置文件不再与二进制文件存储在同一位置。
-
“ORACLE_HOME/dbs”:复制密码文件、SPFILE和实例初始化{ORACLE_SID}.ora文件(如果存在)。
-
“ORACLE_HOME/network/admin”:复制网络配置文件。修改文件中引用的所有路径。
# 19c cp ${OLD_ORACLE_HOME}/dbs/*${ORACLE_SID}* ${NEW_ORACLE_HOME}/dbs/ cp ${OLD_ORACLE_HOME}/dbs/*${ORACLE_SID^^}* ${NEW_ORACLE_HOME}/dbs/ cp ${OLD_ORACLE_HOME}/network/admin/*.ora ${NEW_ORACLE_HOME}/network/admin/ sed -i -e "s|${OLD_ORACLE_HOME}|${NEW_ORACLE_HOME}|g" ${NEW_ORACLE_HOME}/network/admin/*.ora
复制
确保我们正在使用新的ORACLE_HOME。
export ORACLE_SID=cdb1 export ORAENV_ASK=NO . oraenv export ORAENV_ASK=YES echo ${ORACLE_HOME} /u01/app/oracle/product/21.7.0/dbhome_1 $
复制
启动侦听器。
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的路径,则需要对其进行调整。
清理修补程序软件。
cd ${SOFTWARE_DIR} rm -Rf ${DB_SOFTWARE} rm -Rf ${PATCH_TOP} rm -Rf ${OPATCH_FILE} rm -Rf ${PATCH_FILE} rm -Rf PatchSearch.xml
复制
有时我们需要删除旧的ORACLE_HOME。
检查修补程序历史记录
我们可以通过运行以下命令来检查修补程序历史记录。
${ORACLE_HOME}/OPatch/opatch lsinventory
复制
回滚修补程序
要回滚修补程序,我们需要将其切换到旧的ORACLE_HOME,并以正常方式运行数据修补实用程序。
关闭从ORACLE_HOME运行的服务。
dbshut ${ORACLE_HOME}
复制
编辑“/etc/oratab”文件,设置实例的原始原点。
# 19c cdb1:/u01/app/oracle/product/19.0.0/dbhome_1:Y #cdb1:/u01/app/oracle/product/19.16.0/dbhome_1:Y # 21c cdb1:/u01/app/oracle/product/21.0.0/dbhome_1:Y #cdb1:/u01/app/oracle/product/21.7.0/dbhome_1:Y
复制
确保我们使用的是原始的ORACLE_HOME。
export ORACLE_SID=cdb1 export ORAENV_ASK=NO . oraenv export ORAENV_ASK=YES echo ${ORACLE_HOME} /u01/app/oracle/product/21.0.0/dbhome_1 $
复制
启动侦听器。
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,那么我们需要在切换期间在家庭之间复制配置文件。
-
如果我们有任何其他环境文件或脚本包含包含ORACLE_HOME的路径,则需要对其进行调整。
-
我们需要在某个时候清理旧的ORACLE_HOME。
有关详细信息,请参见:
- Critical Patch Updates, Security Alerts and Bulletins
- Patching : Apply a Release Update (RU) to an Existing ORACLE_HOME
原文标题:Patching : Apply a Database Release Update (RU) to a New ORACLE_HOME
原文链接:https://oracle-base.com/articles/misc/apply-db-release-update-to-a-new-oracle-home