В этой записи мы расскажем о том, как применить патч к нашей базе данных. В данном примере наша база данных имеет версию 19.3.0.0.0, и мы будем применять патч 19.20.0.0(Patch 35320081: DATABASE RELEASE UPDATE 19.20.0.0.0.0), хотя процедура обычно похожа, я всегда рекомендую читать README патчей, чтобы быть уверенным в том, что вы будете применять другой патч, если будете следовать этому руководству. В нашем случае мы будем устанавливать патч на локальную базу данных, без ASM и в режиме "No Rolling", т.е. с отключением базы данных.
Прежде всего, как логично узнать текущую версию патча для нашей базы данных, мы можем сделать это несколькими способами, один из которых следующий.
Загрузив переменные окружения базы данных для патча, мы запускаем следующую команду (opatch lspatches).
[oracle@localhost OPatch]$ ./opatch lspatches
29585399;OCW RELEASE UPDATE 19.3.0.0.0.0 (29585399)
29517242;Database Release Update : 19.3.0.0.190416 (29517242)
OPatch завершился успешно.
В нашем случае база данных находится в релизе 19.3.0.0.0.
Загружаем патч 19.20.20.0.0.0 с официального сайта Oracle, в нашем случае для Linux x86-64.

Перед применением патча, как указано в README предпосылок патча, необходимо иметь Opatch версии 12.2.0.1.37 или выше. Я всегда советую загружать последнюю доступную версию OPatch.
1) Загрузите OPatch со следующего адреса Oracle.
https://updates.oracle.com/download/6880880.html

В настоящее время доступна версия 12.2.0.1.40
Чтобы применить эту версию, перейдите в ORACLE_HOME вашей базы данных, переименуйте текущий каталог в "OPatch" и разархивируйте только что загруженный патч.
[oracle@localhost sw]$ cd $ORACLE_HOME
[oracle@localhost sw]$ mv OPatch/ OPatch_old
[oracle@localhost sw]$ unzip p6880880_190000_Linux-x86-64.zip
Архив: p6880880_190000_Linux-x86-64.zip
создание: OPatch/
создание: OPatch/docs/
раздувание: OPatch/docs/cversion.txt
раздувание: OPatch/docs/Users_Guide.txt
раздувание: OPatch/docs/Prereq_Users_Guide.txt
раздувание: OPatch/docs/FAQ
.
.
.
.
Мы проверяем правильность версии OPatch.
[oracle@localhost OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.40
OPatch succeeded.
2) Разархивировать патч
cd /tmp/patch1920/35320081
unizp p35320081_190000_Linux-x86-64.zip
ls -lrt /tmp/parche1920/35320081
drwxr-xr-x. 5 oracle oracle 4096 Jul 15 21:54 35320081
-rw-rw-rw-r-. 1 oracle oracle 1749054 Jul 18 15:03 PatchSearch.xml
-rw-rw-rw-r-. 1 oracle oracle 1769419773 Nov 15 17:54 p35320081_190000_Linux-x86-64.zip
3) Запустите Precheck, чтобы убедиться в отсутствии несоответствий.
В каталоге, созданном при разархивировании (/tmp/parche1920/35320081/35320081), выполните следующую команду:
opatch prereq CheckConflictAgainstOHWithDetail -ph ./
opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Temporary Patch Installer версии 12.2.0.1.40
Copyright (c) 2023, Oracle Corporation. All Rights Reserved.
PREREQ session
Oracle Root Directory : /u01/sw
Central Inventory: /u01/oraInventory
de : /u01/sw/oraInst.loc
OPatch Version : 12.2.0.1.40
OUI Version : 12.2.0.7.0
Расположение файла журнала : /u01/sw/cfgtoollogs/opatch/opatch/opatch2023-11-15_18-17-30PM_1.log
Вызов пререквизита "checkconflicttagainstohwithdetail"
Пререквизит "checkConflictAgainstOHWithDetail" пройден.
OPatch успешно завершен.
В средах RAC патч будет установлен в скользящем режиме (без простоя). Если мы не находимся в RAC-среде, как в нашем примере, то перед применением патча необходимо выключить все базы данных, принадлежащие ORACLE_HOME, подлежащему исправлению, а также listener, связанный с этими базами.
[oracle@localhost 35320081]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0.0 - Production on Wed Nov 15 23:39:23 2023
Version 19.3.0.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0.0 - Production
Version 19.3.0.0.0.0
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
[oracle@localhost 35320081]$ lsnrctl stop
LSNRCTL для Linux: Version 19.0.0.0.0.0 - Production on 15-NOV-2023 23:40:10
Copyright (c) 1991, 2019, Oracle. Все права защищены.
Соединение с (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
Команда выполнена успешно.
На этом этапе можно применить патч.
Самый простой способ - перейти в каталог, где находится распакованный патч, и запустить утилиту OPatch следующим образом:
unzip -d <PATCH_TOP_DIR> p35320081_<version>_<platform>.zip
cd <PATCH_TOP_DIR> 35320081
opatch apply
Здесь мы показываем выход:
[oracle@localhost 35320081]$ opatch apply
Oracle Temporary Patch Installer Release 12.2.0.1.40
Copyright (c) 2023, Oracle Corporation. All Rights Reserved.
Oracle Root Directory : /u01/sw
Central Inventory: /u01/oraInventory
from : /u01/sw/oraInst.loc
OPatch Version : 12.2.0.1.40
OUI Version : 12.2.0.7.0
Расположение файла журнала : /u01/sw/cfgtoollogs/opatch/opatch/opatch2023-11-15_23-48-57PM_1.log
Проверка среды и выполнение предварительных проверок...
OPatch продолжает работу с этими патчами: 35320081
Вы хотите продолжить? [y|n]
y
User Responded with: Y
All checks passed.
Shut down any Oracle instances running outside this ORACLE_HOME on the local system.
(Oracle Root Directory = '/u01/sw')
Is the local system ready to be patched? [y|n]
и
Пользователь ответил: Y
Резервное копирование файлов...
Применение патча к компоненту oracle.xdk.rsf, 19.0.0.0.0.0...
Применение патча к компоненту oracle.ldap.client, 19.0.0.0.0.0.0...
Применение патча к компоненту oracle.mgw.common, 19.0.0.0.0...
Применение патча к компоненту oracle.odbc, 19.0.0.0.0.0...
.
.
Патч 35320081 успешно применен.
Мы проверяем правильность применения патча для базы данных.
[oracle@localhost 35320081]$ opatch lspatches
35320081;Database Release Update : 19.20.0.0.230718 (35320081)
На этом этапе мы можем открыть базу данных и вызвать слушателя, связанного с исправленным ORACLE_HOME.