本文提供了将数据库版本更新 (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




