Oracle Database 19cに最新パッチを適用してみた

# はじめに
Oracle Database にパッチ適用経験がなかったので、手探りながら当ててみた。
途中でエラーを解決しながらパッチ適用しているので、トラブルシューティングも参考にしてみてください

また、以下の記事も併せて読んでみてください！
- [パッチ適用って何？何をするの？](https://qiita.com/shi6maSencho/items/75335f635dbae3c72d85)
- [Datapatch適用はオンライン状態でも実施可能か？](https://qiita.com/shi6maSencho/items/6eaed4705e949eda3a86)

# 1. 環境準備
まずは、パッチ適用するための検証環境の準備。
## 1-1. 環境構築
・Oracle Cloud Infrastructure
・Oracle Database 19.1.0.0
・Oracle Linux

上記、環境構築には、以下の検証環境を利用しました！
[Pluggables, Clones and Containers: Oracle Multitenant Fundamentals](https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/view-workshop?wid=892&clear=RR,180&session=7516294840813) の Lab 4 > Task 2 まで
(↑ SSHキーの生成は、[こちらのマニュアル](https://docs.oracle.com/ja/learn/generate_ssh_keys/index.html#introduction)を参考にしました。)

→ 上記URLの検証環境の構築手順をとりあえず確認したい場合、以下で確認可能です
1. 右上の [Start] ボタンをクリック
1. [Run on your tenancy] ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079416/4b04e071-3760-a7a8-ff71-d3db6953423b.png "手順確認")
## 1-2. 現行環境情報の確認
### 1-2-1. テナント情報の確認
```
SQL> connect sys/Ora_DB4U@localhost:1521/cdb1 as sysdba
Connected.
SQL> show pdbs
  CON_ID CON_NAME   OPEN MODE    RESTRICTED   
       2 PDB$SEED   READ ONLY    NO           
       3 PDB1       READ WRITE   NO           
       4 PDB2       READ WRITE   NO           
       5 PDB3       READ WRITE   NO  
```
### 1-2-2. DBバージョンの確認
SYSDBAでSQL*Plusにログインすると、DBバージョンが**19.11.0.0**と表示されている。
```
[CDB1:oracle@dbhol:/opt/oracle/product/19c/dbhome_1/bin]$ sqlplus / AS SYSDBA

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 28 03:03:21 2023
Version 19.11.0.0.0

Copyright (c) 1982, 2020, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0
SQL> select PATCH_TYPE,ACTION, STATUS,DESCRIPTION, TARGET_VERSION, TARGET_BUILD_DESCRIPTION  from DBA_REGISTRY_SQLPATCH;

PATCH_TYPE  ACTION	  STATUS   DESCRIPTION                            TARGET_VERSION  TARGET_BUILD_DESCRIPTION
---------- --------- ---------- -------------------------------------------------------  ---------------  ----------------
INTERIM     APPLY	  SUCCESS  OJVM RELEASE UPDATE: 19.11.0.0.210420 (32399816)  19.1.0.0.0  Feature Release


PATCH_TYPE  ACTION	  STATUS   DESCRIPTION                            TARGET_VERSION  TARGET_BUILD_DESCRIPTION
---------- --------- ---------- -------------------------------------------------------  ---------------  ----------------
RU	   APPLY	   SUCCESS   Database Release Update : 19.11.0.0.210420 (32545013) 19.11.0.0.0   Release_Update

```
# 2. パッチ情報 / パッチダウンロード先
【パッチ情報】
Oracle Database 19.1.0.0 → Oracle Database 19.**19**.0.0.230418

【パッチダウンロード先】
My Oracle Support(MOS) より以下のドキュメントからダウンロード
[Oracle データベース 19c プロアクテイブ・パッチ情報 (Doc ID 2521164.1)](https://support.oracle.com/knowledge/Oracle%20Cloud/2521164_1.html)
パッチ番号：35042068
# 3. パッチ適用手順
## 3-1. まずはパッチ適用に必要なファイルをダウンロード
1. 上記、パッチダウンロード先から、パッチをダウンロード
2. DB (パッチ 35042068) の [Readme](https://updates.oracle.com/Orion/Services/download?type=readme&aru=25183678) を確認
3. 2.のReadmeに従い、OPatch 19.0.0.0.0をダウンロード
4. OPatch の [Readme](https://updates.oracle.com/Orion/PatchDetails/view_readme?release=600000000122912&plat_lang=46P&patch_file=&file_id=&password_required=&password_required_readme=&merged_trans=&aru=25200694&patch_num=6880880&patch_num_id=3506013&default_release=600000000122912&default_plat_lang=46P&default_compatible_with=&patch_password=&orderby=&direction=&no_header=0&sortcolpressed=&tab_number=) も確認
## 3-2. パッチ適用前準備
### 3-2-1. OPatchの実行に必要なPATHを通す
```
export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/OPatch
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
```
### 3-2-2. OPatch ユーティリティをバージョンアップ
- 既存OPatchディレクトリを新規OPatchディレクトリに**丸ごと入れ替える作業**

以下の通り、既存OPatchユーティリティのバージョンは 12.2.0.1.24 である。
今回、パッチ適用を進めていくには、「**OPatchユーティリティのバージョン 12.2.0.1.36 以降を使用する必要がある(と、readmeに記載あり)。**」
なので、まずは、OPatchのバージョンアップ (OPatch 12.2.0.1.37) を実施する。
<font color="Red">**既にOPatchバージョンの条件を満たしている場合はスキップOK**</font>
```
----------------------
既存OPatchバージョン確認
----------------------
[CDB1:oracle@dbhol:/opt/oracle/product/19c/dbhome_1/OPatch]$ opatch version
OPatch Version: 12.2.0.1.24

OPatch succeeded.
```
<font color="Red">下記1～8の手順は、簡単にまとめると以下のコマンドでOPatchディレクトリの入れ替え作業を行っているだけ</font>
```
$ cd $ORACLE_HOME
$ mv OPatch <既存OPatchディレクトリをアーカイブしておけるディレクトリ名>
$ unzip p6880880_190000_LINUX.zip
$ cd OPatch
$ opatch version または、$ORACLE_HOME/OPatch/opatch version -jdk $ORACLE_HOME/jdk
```
以下、詳細な手順書
1. ORACLE_HOME 配下に既存OPatchディレクトリが存在するか確認
2. 存在した場合は、1のファイルをどこか適当なアーカイブ可能なディレクトリに移動させる
3. ダウンロードしたOPatchのzipファイルを解凍するディレクトリの作成
　```
$ mkdir <ディレクトリ名>
　```
4. 3.で作成したディレクトリにOPatchのzipファイルを配置。以下のコマンドでUnzipする。
　```
$ unzip p6880880_190000_LINUX.zip
　```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079416/b1143489-64ef-708c-409b-f3faebb8f7a4.png "zipファイル展開完了")
5. unzip後、OPatchディレクトリが展開される。
6. 5.を、ORACLE_HOME配下に移動する
　```
$ mv -i OPatch /opt/oracle/product/19c/dbhome_1
　```
　　　　　-i (--interactive) オプション：上書き前に確認する
6. 最後に、インストールしたOpatchバージョンを確認する。
　```$ cd OPatch```　
　```$ opatch version```

**:warning:トラブルシューティング:warning:**
本来であれば上記だけでバージョン確認ができるはずなのだが、以下のようなエラーが表示された場合は、
```
[CDB1:oracle@dbhol:/opt/oracle/product/19c/dbhome_1/OPatch]$ opatch version
/opt/oracle/product/19c/dbhome_1/OPatch/opatch: line 839: [: too many arguments
/opt/oracle/product/19c/dbhome_1/OPatch/opatch: line 839: [: too many arguments
Java (1.7) could not be located. OPatch cannot proceed!
OPatch returns with error code = 1
```
　jdkを引数に指定して、明示的にjavaホームを指定する必要がある。
　(ここで結構つまずいてしまった:sob:)
　```
$ORACLE_HOME/OPatch/opatch version -jdk $ORACLE_HOME/jdk
　```
```
[CDB1:oracle@dbhol:/opt/oracle/product/19c/dbhome_1]$ $ORACLE_HOME/OPatch/opatch version -jdk $ORACLE_HOME/jdk
OPatch Version: 12.2.0.1.37

OPatch succeeded.
```
8.　これで、ORACLE_HOME配下に新規OPatch (12.2.0.1.37) のインストール完了:sunny:

### 3-2-3. 暫定パッチとの競合確認
1. 続いて、今回パッチ適用対象のp35042068_190000_Linux-x86-64.zipをunzipする。
　```
$ unzip p35042068_190000_Linux-x86-64.zip 
　```
2. 既にインストール済みの個別パッチが35042068と競合するかを確認する。
　```
$ cd 35042068 
　```
　```
$ opatch prereq CheckConflictAgainstOHWithDetail -ph ./
　```

**:warning:トラブルシューティング:warning:**
本来であれば上記だけでバージョン確認ができるはずなのだが、以下のようなエラーが表示された場合は、
```
[CDB1:oracle@dbhol:/opt/oracle/OPatch_new/35042068]$ opatch prereq CheckConflictAgainstOHWithDetail -ph ./
/opt/oracle/product/19c/dbhome_1/OPatch/opatch: line 839: [: too many arguments
/opt/oracle/product/19c/dbhome_1/OPatch/opatch: line 839: [: too many arguments
Java (1.7) could not be located. OPatch cannot proceed!
OPatch returns with error code = 1
```
ここでも、先ほどと同様に、jdkを引数に指定して、明示的にjavaホームを指定する必要がある。
　```
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./ -jdk $ORACLE_HOME/jdk
　```
```
--------------------------------
　暫定パッチとの競合チェックの結果
--------------------------------
[CDB1:oracle@dbhol:/opt/oracle/OPatch_new/35042068]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./ -jdk $ORACLE_HOME/jdk
Oracle Interim Patch Installer version 12.2.0.1.37
Copyright (c) 2023, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /opt/oracle/product/19c/dbhome_1
Central Inventory : /opt/oracle/oraInventory
   from           : /opt/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.37
OUI version       : 12.2.0.7.0
Log file location : /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2023-04-27_07-50-54AM_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.
```
今回は、検証結果を利用しているということもあり、既に適用されている個別パッチなども存在しておりらず、問題なく完了した。
### 3-2-4. DBインスタンスとリスナーの停止
Readme 記載通り、今回はRAC環境ではないので、インスタンスとリスナーの停止を実施する。

#### 3-2-4-1. リスナーの停止
1. listener.oraファイルを確認すると、listener_name はデフォルトの「**LISTENER**」で登録されていた。
2. oracleユーザで```$ORACLE_HOME/bin```配下に移動し、以下コマンドでリスナーを停止する。
 ```
 $ lsnrctl STOP [listener_name]
 ```
上記コマンドを実行した結果が、以下。
 ```
--------------------
リスナー停止_実行結果
--------------------
[CDB1:oracle@dbhol:/opt/oracle/product/19c/dbhome_1/bin]$ lsnrctl STOP LISTENER

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 28-APR-2023 02:50:22

Copyright (c) 1991, 2021, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dbhol.livelabs.oraclevcn.com)(PORT=1521)))
The command completed successfully
 ```
[9.5.1 リスナーの起動と停止](https://docs.oracle.com/cd/F19136_01/netag/configuring-and-administering-oracle-net-listener.html#GUID-CF3D3974-B170-4FB1-8850-6A083CBC7917)

#### 3-2-4-2. インスタンスの停止
1. sysユーザでSQL*Plus (または Oracle Restart でも可) にログイン
※ SQL＊PlusでSYSOPER、SYSDBA、SYSBACKUPまたはSYSDGとして接続した場合に、インスタンス停止が可能
2. 以下コマンドを実行
 ```
$ sqlplus / AS SYSDBA
sql> SHUTDOWN IMMEDIATE
 ```
上記コマンドを実行した結果が、以下。
 ```
------------------------
インスタンス停止_実行結果
------------------------
[CDB1:oracle@dbhol:/opt/oracle/product/19c/dbhome_1/bin]$ sqlplus / AS SYSDBA

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 28 03:03:21 2023
Version 19.11.0.0.0

Copyright (c) 1982, 2020, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0

SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.
 ```
[3.3.3 IMMEDIATEモードによる停止](https://docs.oracle.com/cd/F19136_01/admin/starting-up-and-shutting-down.html#GUID-3C64BD77-4C53-41C6-B691-6CC5F59F2CEA)
## 3-3. OPatchの適用
### 3-3-1. OPatchの適用
1. [3-2-3. 暫定パッチとの競合確認](#3-2-3-暫定パッチとの競合確認)　で回答した今回のパッチファイルが存在するディレクトリに移動する。
```cd /opt/oracle/OPatch_new/35042068```
2. OPatchを適用する。
```opatch apply```

**:warning:トラブルシューティング:warning:**
本来であれば上記だけでバージョン確認ができるはずなのだが、以下のようなエラーが表示された場合は、
```
[CDB1:oracle@dbhol:/opt/oracle/OPatch_new/35042068]$ opatch apply
/opt/oracle/product/19c/dbhome_1/OPatch/opatch: line 839: [: too many arguments
/opt/oracle/product/19c/dbhome_1/OPatch/opatch: line 839: [: too many arguments
Java (1.7) could not be located. OPatch cannot proceed!
OPatch returns with error code = 1
```
ここでも、先ほどと同様に、jdkを引数に指定して、明示的にjavaホームを指定する必要がある。
　```
$ $ORACLE_HOME/OPatch/opatch apply -jdk $ORACLE_HOME/jdk
　```
```
-----------------------
　OPatch適用するも失敗
-----------------------
[CDB1:oracle@dbhol:/opt/oracle/OPatch_new/35042068]$ $ORACLE_HOME/OPatch/opatch apply -jdk $ORACLE_HOME/jdk
Oracle Interim Patch Installer version 12.2.0.1.37
Copyright (c) 2023, Oracle Corporation.  All rights reserved.


Oracle Home       : /opt/oracle/product/19c/dbhome_1
Central Inventory : /opt/oracle/oraInventory
   from           : /opt/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.37
OUI version       : 12.2.0.7.0
Log file location : /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2023-04-28_04-22-32AM_1.log

Verifying environment and performing prerequisite checks...
Prerequisite check "CheckActiveFilesAndExecutables" failed.
The details are:


Following active files/executables/libs are used by ORACLE_HOME :/opt/oracle/product/19c/dbhome_1
/opt/oracle/product/19c/dbhome_1/bin/oracle




/opt/oracle/product/19c/dbhome_1/bin/tnslsnr
/opt/oracle/product/19c/dbhome_1/lib/libclntsh.so.19.1
/opt/oracle/product/19c/dbhome_1/lib/libasmclntsh19.so
UtilSession failed: Prerequisite check "CheckActiveFilesAndExecutables" failed.
Log file location: /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2023-04-28_04-22-32AM_1.log

OPatch failed with error code 73
```
なんてことだ・・・・なぜ、エラーが、、、、:disappointed_relieved:
### 3-3-2. OPatch適用に失敗したのでトラブルシューティング
トラブルシューティングだけでも、相当な量になりそうだったので、下記の記事に詳細を記載。
[OPatch適用時のトラブルシューティング](https://qiita.com/shi6maSencho/items/cf45015d9366528ba9b0)
要点：ORACLE_HOMEを利用しているアクティブなプロセスが残っていたので、全てkill

### 3-3-3. OPatch適用 <リベンジ編！！>
上記、プロセスを全てkillしてから再度OPatch適用したところ、遂に実行できた！！！:sob:
```$ $ORACLE_HOME/OPatch/opatch apply -jdk $ORACLE_HOME/jdk```
```
[CDB1:oracle@dbhol:/opt/oracle/OPatch_new/35042068]$ $ORACLE_HOME/OPatch/opatch apply -jdk $ORACLE_HOME/jdk
Oracle Interim Patch Installer version 12.2.0.1.37
Copyright (c) 2023, Oracle Corporation.  All rights reserved.


Oracle Home       : /opt/oracle/product/19c/dbhome_1
Central Inventory : /opt/oracle/oraInventory
   from           : /opt/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.37
OUI version       : 12.2.0.7.0
Log file location : /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2023-04-28_07-27-40AM_1.log

Verifying environment and performing prerequisite checks...

--------------------------------------------------------------------------------
Start OOP by Prereq process.
Launch OOP...

Oracle Interim Patch Installer version 12.2.0.1.37
Copyright (c) 2023, Oracle Corporation.  All rights reserved.


Oracle Home       : /opt/oracle/product/19c/dbhome_1
Central Inventory : /opt/oracle/oraInventory
   from           : /opt/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.37
OUI version       : 12.2.0.7.0
Log file location : /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2023-04-28_07-28-14AM_1.log

Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   35042068  

Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.

Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/opt/oracle/product/19c/dbhome_1')


Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Applying interim patch '35042068' to OH '/opt/oracle/product/19c/dbhome_1'
ApplySession: Optional component(s) [ oracle.network.gsm, 19.0.0.0.0 ] , [ oracle.rdbms.ic, 19.0.0.0.0 ] , [ oracle.rdbms.tg4db2, 19.0.0.0.0 ] , [ oracle.tfa, 19.0.0.0.0 ] , [ oracle.ons.cclient, 19.0.0.0.0 ] , [ oracle.network.cman, 19.0.0.0.0 ] , [ oracle.rdbms.tg4sybs, 19.0.0.0.0 ] , [ oracle.sdo.companion, 19.0.0.0.0 ] , [ oracle.rdbms.tg4ifmx, 19.0.0.0.0 ] , [ oracle.options.olap.api, 19.0.0.0.0 ] , [ oracle.rdbms.tg4tera, 19.0.0.0.0 ] , [ oracle.oid.client, 19.0.0.0.0 ] , [ oracle.options.olap, 19.0.0.0.0 ] , [ oracle.ons.eons.bwcompat, 19.0.0.0.0 ] , [ oracle.rdbms.tg4msql, 19.0.0.0.0 ] , [ oracle.net.cman, 19.0.0.0.0 ] , [ oracle.xdk.companion, 19.0.0.0.0 ] , [ oracle.jdk, 1.8.0.191.0 ]  not present in the Oracle Home or a higher version is found.

Patching component oracle.rsf, 19.0.0.0.0...

Patching component oracle.nlsrtl.rsf.core, 19.0.0.0.0...

Patching component oracle.slax.rsf, 19.0.0.0.0...

Patching component oracle.ordim.jai, 19.0.0.0.0...

Patching component oracle.bali.jewt, 11.1.1.6.0...

Patching component oracle.bali.ewt, 11.1.1.6.0...

Patching component oracle.help.ohj, 11.1.1.7.0...

Patching component oracle.rdbms.locator, 19.0.0.0.0...

Patching component oracle.perlint.expat, 2.0.1.0.4...

Patching component oracle.rdbms.util, 19.0.0.0.0...

Patching component oracle.rdbms.rsf, 19.0.0.0.0...

Patching component oracle.rdbms, 19.0.0.0.0...

Patching component oracle.assistants.acf, 19.0.0.0.0...

Patching component oracle.assistants.deconfig, 19.0.0.0.0...

Patching component oracle.assistants.server, 19.0.0.0.0...

Patching component oracle.blaslapack, 19.0.0.0.0...

Patching component oracle.buildtools.rsf, 19.0.0.0.0...

Patching component oracle.ctx, 19.0.0.0.0...

Patching component oracle.dbdev, 19.0.0.0.0...

Patching component oracle.dbjava.ic, 19.0.0.0.0...

Patching component oracle.dbjava.jdbc, 19.0.0.0.0...

Patching component oracle.dbjava.ucp, 19.0.0.0.0...

Patching component oracle.duma, 19.0.0.0.0...

Patching component oracle.javavm.client, 19.0.0.0.0...

Patching component oracle.ldap.owm, 19.0.0.0.0...

Patching component oracle.ldap.rsf, 19.0.0.0.0...

Patching component oracle.ldap.security.osdt, 19.0.0.0.0...

Patching component oracle.marvel, 19.0.0.0.0...

Patching component oracle.network.rsf, 19.0.0.0.0...

Patching component oracle.odbc.ic, 19.0.0.0.0...

Patching component oracle.ons, 19.0.0.0.0...

Patching component oracle.ons.ic, 19.0.0.0.0...

Patching component oracle.oracore.rsf, 19.0.0.0.0...

Patching component oracle.perlint, 5.28.1.0.0...

Patching component oracle.precomp.common.core, 19.0.0.0.0...

Patching component oracle.precomp.rsf, 19.0.0.0.0...

Patching component oracle.rdbms.crs, 19.0.0.0.0...

Patching component oracle.rdbms.dbscripts, 19.0.0.0.0...

Patching component oracle.rdbms.deconfig, 19.0.0.0.0...

Patching component oracle.rdbms.oci, 19.0.0.0.0...

Patching component oracle.rdbms.rsf.ic, 19.0.0.0.0...

Patching component oracle.rdbms.scheduler, 19.0.0.0.0...

Patching component oracle.rhp.db, 19.0.0.0.0...

Patching component oracle.sdo, 19.0.0.0.0...

Patching component oracle.sdo.locator.jrf, 19.0.0.0.0...

Patching component oracle.sqlplus, 19.0.0.0.0...

Patching component oracle.sqlplus.ic, 19.0.0.0.0...

Patching component oracle.wwg.plsql, 19.0.0.0.0...

Patching component oracle.xdk.xquery, 19.0.0.0.0...

Patching component oracle.javavm.server, 19.0.0.0.0...

Patching component oracle.xdk.parser.java, 19.0.0.0.0...

Patching component oracle.odbc, 19.0.0.0.0...

Patching component oracle.ctx.rsf, 19.0.0.0.0...

Patching component oracle.oraolap, 19.0.0.0.0...

Patching component oracle.rdbms.hsodbc, 19.0.0.0.0...

Patching component oracle.network.client, 19.0.0.0.0...

Patching component oracle.ctx.atg, 19.0.0.0.0...

Patching component oracle.rdbms.install.common, 19.0.0.0.0...

Patching component oracle.oraolap.dbscripts, 19.0.0.0.0...

Patching component oracle.ldap.rsf.ic, 19.0.0.0.0...

Patching component oracle.install.deinstalltool, 19.0.0.0.0...

Patching component oracle.ldap.client, 19.0.0.0.0...

Patching component oracle.rdbms.rman, 19.0.0.0.0...

Patching component oracle.ovm, 19.0.0.0.0...

Patching component oracle.rdbms.drdaas, 19.0.0.0.0...

Patching component oracle.rdbms.hs_common, 19.0.0.0.0...

Patching component oracle.oraolap.api, 19.0.0.0.0...

Patching component oracle.network.listener, 19.0.0.0.0...

Patching component oracle.rdbms.dv, 19.0.0.0.0...

Patching component oracle.sdo.locator, 19.0.0.0.0...

Patching component oracle.nlsrtl.rsf, 19.0.0.0.0...

Patching component oracle.xdk.rsf, 19.0.0.0.0...

Patching component oracle.xdk, 19.0.0.0.0...

Patching component oracle.dbtoolslistener, 19.0.0.0.0...

Patching component oracle.rdbms.install.plugins, 19.0.0.0.0...

Patching component oracle.ldap.ssl, 19.0.0.0.0...

Patching component oracle.rdbms.lbac, 19.0.0.0.0...

Patching component oracle.mgw.common, 19.0.0.0.0...

Patching component oracle.precomp.lang, 19.0.0.0.0...

Patching component oracle.precomp.common, 19.0.0.0.0...

Patching component oracle.jdk, 1.8.0.201.0...
Patch 35042068 successfully applied.
Sub-set patch [32545013] has become inactive due to the application of a super-set patch [35042068].
Please refer to Doc ID 2161861.1 for any possible further required actions.
Log file location: /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2023-04-28_07-28-14AM_1.log

OPatch succeeded.
```
ようやく出会えた OPatch succeeded.！！！！！！！:tired_face: :sob: :tired_face: :sob:

### 3-3-4. 適用されたパッチバージョンの確認
次のコマンドで、適用済みパッチ情報を確認する。
本当ならこっち(```$ opatch lspatches```)
今回の私はこっち(```$ $ORACLE_HOME/OPatch/opatch lspatches -jdk $ORACLE_HOME/jdk```)
```
[CDB1:oracle@dbhol:/opt/oracle/OPatch_new/35042068]$ $ORACLE_HOME/OPatch/opatch lspatches -jdk $ORACLE_HOME/jdk
35042068;Database Release Update : 19.19.0.0.230418 (35042068)
32399816;OJVM RELEASE UPDATE: 19.11.0.0.210420 (32399816)
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)

OPatch succeeded.
```
OPatch適用、成功！！！！！！
## 3-4. Patch Post-Installation (datapatch) 適用
上記までで、ORACLE_HOMEに新規パッチの適用が完了したので、続いてdatapatchを適用する。

1. SQL*Plusにログイン。```$ sqlplus /nolog```
1. sysdbaユーザで入る。```SQL> Connect / as sysdba```
1. DBを起動する。```SQL> startup```
1. 全てのpdbをオープンする。```SQL> alter pluggable database all open;```
1. pdbの状態確認。```SQL> show pdbs```
1. oracleユーザに戻る。```SQL> quit```
1. OPatchディレクトリに移動。```% cd $ORACLE_HOME/OPatch```
1. リスナーオープン。```$ lsnrctl START [listener_name]```
1. datapatch実行。```% ./datapatch -verbose```

```
[CDB1:oracle@dbhol:/opt/oracle/OPatch_new/35042068]$ sqlplus /nolog

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 28 08:10:19 2023
Version 19.19.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area 3221223168 bytes
Fixed Size		    9168640 bytes
Variable Size		 1677721600 bytes
Database Buffers	 1526726656 bytes
Redo Buffers		    7606272 bytes
Database mounted.
Database opened.
SQL> alter pluggable database all open;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDB1 			  READ WRITE NO
	 4 PDB2 			  READ WRITE NO
	 5 PDB3 			  READ WRITE NO
SQL> quit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
[CDB1:oracle@dbhol:/opt/oracle/OPatch_new/35042068]$ cd $ORACLE_HOME/OPatch
[CDB1:oracle@dbhol:/opt/oracle/product/19c/dbhome_1/OPatch]$ lsnrctl START LISTENER

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 28-APR-2023 08:27:23

Copyright (c) 1991, 2023, Oracle.  All rights reserved.

Starting /opt/oracle/product/19c/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 19.0.0.0.0 - Production
System parameter file is /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/dbhol/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbhol.livelabs.oraclevcn.com)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dbhol.livelabs.oraclevcn.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                28-APR-2023 08:27:23
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/dbhol/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbhol.livelabs.oraclevcn.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
```
datapatchを実行したら、エラーが発生！？
```
[CDB1:oracle@dbhol:/opt/oracle/product/19c/dbhome_1/OPatch]$ ./datapatch -verbose
SQL Patching tool version 19.19.0.0.0 Production on Fri Apr 28 08:17:14 2023
Copyright (c) 2012, 2023, Oracle.  All rights reserved.

Log file for this invocation: /opt/oracle/cfgtoollogs/sqlpatch/sqlpatch_20665_2023_04_28_08_17_14/sqlpatch_invocation.log

Connecting to database...OK
Gathering database info...done

Note:  Datapatch will only apply or rollback SQL fixes for PDBs
       that are in an open state, no patches will be applied to closed PDBs.
       Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation
       (Doc ID 1585822.1)

Bootstrapping registry and package to current versions...done
Error: prereq checks failed!
verify_queryable_inventory returned ORA-20001: Latest xml inventory is not loaded into table
Prereq check failed, exiting without installing any patches.

Please refer to MOS Note 1609718.1 and/or the invocation log
/opt/oracle/cfgtoollogs/sqlpatch/sqlpatch_20665_2023_04_28_08_17_14/sqlpatch_invocation.log
for information on how to resolve the above errors.

SQL Patching tool complete on Fri Apr 28 08:17:21 2023
```
エラー記載の通り [Datapatch: データベース 12c パッチ適用後の SQL 自動化 (Doc ID 1585822.1)](https://support.oracle.com/knowledge/Oracle%20Database%20Products/1585822_1.html) を確認してみると、OPatchAutoの場合は自動的にSQLのパッチが適用されるみたいだ。
しかし、**今回はOPatchを利用しているので、自動的にはSQLパッチは適用されないハズ・・・。**
なぜだ・・・？

この後、[1-2-2. DBバージョンの確認](#1-2-2-dbバージョンの確認)と同じように、DBバージョンが19.19になっていることを確認したが、更新されていなかった。
## 3-5. Patch Post-Installation (datapatch) 適用(再)
エラーを色々調査・試行錯誤を繰り返してみたが、エラー解消できず、検証環境を構築し直しリベンジ。(検証環境依存の何かがあったのか・・？)
### 3-5-1. datapatch適用(リベンジ)
手順は、[3-4. Patch Post-Installation (datapatch) 適用](#3-4-patch-post-installation-datapatch-適用) と同様！
```
-----------------------
　datapatchリベンジ
-----------------------
[oracle@demodbsystem 35042068]$ cd $ORACLE_HOME/OPatch
[oracle@demodbsystem OPatch]$ ./datapatch -verbose
SQL Patching tool version 19.19.0.0.0 Production on Tue May 16 06:22:14 2023
Copyright (c) 2012, 2023, Oracle.  All rights reserved.

Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_37810_2023_05_16_06_22_14/sqlpatch_invocation.log

Connecting to database...OK
Gathering database info...done

Note:  Datapatch will only apply or rollback SQL fixes for PDBs
       that are in an open state, no patches will be applied to closed PDBs.
       Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation
       (Doc ID 1585822.1)

Bootstrapping registry and package to current versions...done
Determining current state...done

Current state of interim SQL patches:
Interim patch 34786990 (OJVM RELEASE UPDATE: 19.18.0.0.230117 (34786990)):
  Binary registry: Installed
  PDB CDB$ROOT: Applied successfully on 03-FEB-23 12.21.48.790862 PM
  PDB DEMODB_PDB1: Applied successfully on 03-FEB-23 12.21.58.028065 PM
  PDB PDB$SEED: Applied successfully on 03-FEB-23 12.21.58.028065 PM
  PDB PDB1: Applied successfully on 03-FEB-23 12.21.58.028065 PM

Current state of release update SQL patches:
  Binary registry:
    19.19.0.0.0 Release_Update 230322020406: Installed
  PDB CDB$ROOT:
    Applied 19.18.0.0.0 Release_Update 230127005551 successfully on 03-FEB-23 12.21.48.785253 PM
  PDB DEMODB_PDB1:
    Applied 19.18.0.0.0 Release_Update 230127005551 successfully on 03-FEB-23 12.21.58.023420 PM
  PDB PDB$SEED:
    Applied 19.18.0.0.0 Release_Update 230127005551 successfully on 03-FEB-23 12.21.58.023420 PM
  PDB PDB1:
    Applied 19.18.0.0.0 Release_Update 230127005551 successfully on 03-FEB-23 12.21.58.023420 PM

Adding patches to installation queue and performing prereq checks...done
Installation queue:
  For the following PDBs: CDB$ROOT PDB$SEED DEMODB_PDB1 PDB1
    No interim patches need to be rolled back
    Patch 35042068 (Database Release Update : 19.19.0.0.230418 (35042068)):
      Apply from 19.18.0.0.0 Release_Update 230127005551 to 19.19.0.0.0 Release_Update 230322020406
    No interim patches need to be applied

Installing patches...
Patch installation complete.  Total patches installed: 4

Validating logfiles...done
Patch 35042068 apply (pdb CDB$ROOT): SUCCESS
  logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/35042068/25183678/35042068_apply_DEMODB_CDBROOT_2023May16_06_23_37.log (no errors)
Patch 35042068 apply (pdb PDB$SEED): SUCCESS
  logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/35042068/25183678/35042068_apply_DEMODB_PDBSEED_2023May16_06_25_44.log (no errors)
Patch 35042068 apply (pdb DEMODB_PDB1): SUCCESS
  logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/35042068/25183678/35042068_apply_DEMODB_DEMODB_PDB1_2023May16_06_25_44.log (no errors)
Patch 35042068 apply (pdb PDB1): SUCCESS
  logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/35042068/25183678/35042068_apply_DEMODB_PDB1_2023May16_06_25_44.log (no errors)
SQL Patching tool complete on Tue May 16 06:29:48 2023
```
### 3-5-2. バージョン確認 (パッチ適用後)
ちゃんとDBのパッチバージョンが **RU19.19** に更新されていることを確認！
やはり、OPatch利用の場合は、datapatch適用も手動で必要なことを確認でき、モヤが晴れた:sunny:
```
[oracle@demodbsystem OPatch]$ sqlplus / AS SYSDBA

SQL*Plus: Release 19.0.0.0.0 - Production on Tue May 16 06:32:02 2023
Version 19.19.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.19.0.0.0

SQL> select PATCH_TYPE,ACTION, STATUS,DESCRIPTION, TARGET_VERSION, TARGET_BUILD_DESCRIPTION  from DBA_REGISTRY_SQLPATCH;

PATCH_TYPE  ACTION	  STATUS   DESCRIPTION                            TARGET_VERSION  TARGET_BUILD_DESCRIPTION
---------- --------- ---------- -------------------------------------------------------  ---------------  ----------------
INTERIM    APPLY     SUCCESS  OJVM RELEASE UPDATE: 19.18.0.0.230117 (34786990)  19.1.0.0.0  Feature Release


PATCH_TYPE  ACTION	  STATUS   DESCRIPTION                            TARGET_VERSION  TARGET_BUILD_DESCRIPTION
---------- --------- ---------- -------------------------------------------------------  ---------------  ----------------
RU         APPLY     SUCCESS  DATABASE RELEASE UPDATE : 19.18.0.0.230117 (REL-JAN230131) (34765931) 19.18.0.0.0 Release_Update


PATCH_TYPE  ACTION	  STATUS   DESCRIPTION                            TARGET_VERSION  TARGET_BUILD_DESCRIPTION
---------- --------- ---------- -------------------------------------------------------  ---------------  ----------------
RU         APPLY      SUCCESS  Database Release Update : 19.19.0.0.230418 (35042068) 19.19.0.0.0 Release_Update
```
完！

ログファイルも確認したが特に問題なさそうだった。

# 終わりに
今回、初めてのパッチ適用ということもあり、つまずきまくりましたが、何とか最後まで完了できうれしいです・・・:sob:

再掲：こちらもよければ是非！
- [パッチ適用って何？何をするの？](https://qiita.com/shi6maSencho/items/75335f635dbae3c72d85)
- [Datapatch適用はオンライン状態でも実施可能か？](https://qiita.com/shi6maSencho/items/6eaed4705e949eda3a86)