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

将数据库版本更新 (RU) 应用于新ORACLE_HOME

原创 Ellison 2023-03-17
1078

本文提供了将数据库版本更新 (RU) 应用于简单单实例 Oracle 数据库的新数据库的示例。

假设

本文做了一些假设。

  • 我们有一个现有的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_HOMEORACLE_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。请注意,我们在命令中引用了该位置,并且为了安全起见,我们取消了变量的设置。NEW_ORACLE_HOMErunInstallerORACLE_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


我们现在有新修补的主页,因此我们已准备好修补数据库。

修补数据库

要修补数据库,我们需要将其切换到新的数据库并以正常方式运行 datapatch 实用程序。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


在以前的版本中,我们需要在 home 之间复制以下文件,但在 21c 以后,这不是必需的,因为我们使用的是只读 home,因此所有配置文件不再存储在与二进制文件相同的位置。

  • “ORACLE_HOME/dbs”:复制密码文件、SPFILE 和实例 init{ORACLE_SID}.ora 文件(如果存在)。
  • “ORACLE_HOME/网络/管理员”:复制网络配置文件。修改文件中引用的任何路径。
# 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


运行数据补丁。

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


运行数据补丁。

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

评论