暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

补丁:将数据库版本更新(RU)应用于新的ORACLE_HOME

原创 eternity 2022-09-26
403

本文给出了一个将数据库发布更新(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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 假设
  • 环境
  • 创建新的ORACLE_HOME
    • 修补数据库
    • 检查修补程序历史记录
    • 回滚修补程序
  • 利弊