はじめに
今回は以前にインストールしたOracle Database 21c(21.3.0.0.0)にOPatchを使用してOracle Database 21.5.0.0.0へのRU(Release Update)のパッチを適用した。失敗例なども含めて実行した手順を紹介する。
Oracle Database 21c(21.3.0.0.0)のインストール方法に関しては以下の記事を参考にするとよい。
事前準備
MOS(My Oracle Support)から適用するパッチをダウンロードする
パッチのファイルをダウンロードするためMOS(My Oracle Support)へアクセスする。
※MOSを使用するためにはサポート契約の上、登録が必要である。MOSに関する情報は[こちら]
(https://docs.oracle.com/cd/E26121_01/doc.60/e58519/toc.htm)。
Patches & Updatesのタブをクリックする。
"Search"タブの"Product or Family(Advanced)"をクリックし、検索したい製品名とリリースをプルダウンから指定する。今回は以下のように選択した。選択後"Search"ボタンをクリックする。
パッチの検索結果から適用したいパッチを選択する。
"Download"をクリックする。
ダウンロードリンクをクリックしてダウンロードする。
これでダウンロード完了。
パッチファイルをローカルマシンから仮想マシンに移行する
WinSCPを使用してローカルマシンからOracle Database 21c(21.3.0.0.0)がインストールされている仮想マシン(Oracle Linux 8)のoracleユーザーのホームディレクトリにダウンロードしたパッチファイルを移行する。
データベースとリスナーを停止する
今回適用するパッチはデータベースとリスナーを停止する必要があるため以下の操作をそれぞれ行う。
リスナーを停止するため、oracleユーザーでORACLE_HOME/bin
ディレクトリで以下のコマンドを実行する。
lsnrctl stop listener_name
※ listener_nameに登録してあるリスナー名を入力する。リスナー名はORACLE_BASE/homes/Oracleホーム名/network/admin/listenernames.ora
で確認できる。Oracleホーム名は任意であるが、インストーラーによってOraDB21Home1で自動的に命名される。
データベースを停止するため、sysユーザーでSQL*Plusにログインして以下のコマンドを実行する。
SHUTDOWN IMMEDIATE
PATHを通す
以下を実行してOPatchの実行に必要なPATHを通す。既に設定済みであれば不要である。
export PATH=$PATH:/u01/app/oracle/product/21.3.0/dbhome_1/OPatch
export ORACLE_HOME=/u01/app/oracle/product/21.3.0/dbhome_1
ディレクトリを作成する
ローカルマシンから移行したパッチファイルを解凍するためのディレクトリをoracleユーザーで任意の場所に作成する。今回は/home/oracle
に作成した。
mkdir patchdir
パッチファイルを解凍する
作成したディレクトリに移動して、ローカルマシンから移行したパッチファイルを解凍する。
cd /home/oracle/patchdir
unzip ~/file_name.zip
※ file_name.zipはパッチファイル名
$ cd /home/oracle/patchdir
$ unzip ~/p33516412_210000_Linux-x86-64.zip
解凍後、パッチ番号がついたディレクトリが作成される。今回はpatchdirディレクトリに33516412ディレクトリが作成される。パッチを適用する際はこのディレクトリに移動して実行する。
パッチを適用する
前提条件チェックprereqの実行
解凍したパッチファイルのディレクトリ(パッチ番号のディレクトリ)に移動して、前提条件チェックであるprereqコマンドを実行する。今回は実行例としてCheckConflictAgainstOHWithDetailコマンドを実行する。
cd /home/oracle/patchdir/33516412
opatch CheckConflictAgainstOHWithDetail -ph ./
CheckConflictAgainstOHWithDetailは競合およびスーパーセットに関する詳細情報を確認することにより、適用されるパッチとOH内のパッチの間に競合が存在するかどうかを確認する。他にも様々な前提条件チェックのコマンドがある。
opatchのprereqコマンドの詳細に関してはこちら。
$ opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installerバージョン12.2.0.1.26
Copyright (c) 2022, Oracle Corporation. All rights reserved。
PREREQ session
Oracleホーム : /u01/app/oracle/product/21.3.0/dbhome_1
中央インベントリ : /u01/app/oraInventory
元 : /u01/app/oracle/product/21.3.0/dbhome_1/oraInst.loc
OPatchのバージョン : 12.2.0.1.26
OUIのバージョン : 12.2.0.9.0
ログ・ファイルの場所 : /u01/app/oracle/product/21.3.0/dbhome_1/cfgtoollogs/opatch/opatch2022-02-04_16-38-09午後_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.
今回は当然であるが先に適用しているパッチがなかったためパッチの競合は確認できなかった。
opatchの実行
opatchコマンドでパッチを適用する。
cd /home/oracle/patchdir/33516412
opatch apply
$ opatch apply
Oracle Interim Patch Installerバージョン12.2.0.1.26
Copyright (c) 2022, Oracle Corporation. All rights reserved。
Oracleホーム : /u01/app/oracle/product/21.3.0/dbhome_1
中央インベントリ : /u01/app/oraInventory
元 : /u01/app/oracle/product/21.3.0/dbhome_1/oraInst.loc
OPatchのバージョン : 12.2.0.1.26
OUIのバージョン : 12.2.0.9.0
ログ・ファイルの場所 : /u01/app/oracle/product/21.3.0/dbhome_1/cfgtoollogs/opatch/opatch2022-02-04_16-39-40午後_1.log
Verifying environment and performing prerequisite checks...
Prerequisite check "CheckMinimumOPatchVersion" failed.
The details are:
The OPatch being used has version 12.2.0.1.26 while the following patch(es) require higher versions:
Patch 33516412 requires OPatch version 12.2.0.1.28.
Please download latest OPatch from My Oracle Support.
UtilSessionが失敗しました: Prerequisite check "CheckMinimumOPatchVersion" failed.
Log file location: /u01/app/oracle/product/21.3.0/dbhome_1/cfgtoollogs/opatch/opatch2022-02-04_16-39-40午後_1.log
OPatch failed with error code 73
failedとなった。
失敗した原因は、
The OPatch being used has version 12.2.0.1.26 while the following patch(es) require higher versions:
Patch 33516412 requires OPatch version 12.2.0.1.28.
Please download latest OPatch from My Oracle Support.
パッチ33516412を適用するにはOPatchのバージョンが12.2.0.1.28以上である必要があるため、今使用しているOPatchのバージョン(12.2.0.1.26)では実行できないということ。つまり、MOSからOPatchの新しいバージョンをダウンロードしてくる必要がある。
OPatchのバージョンを上げる
序盤に紹介した事前準備と手順がかぶるため説明を少々省略する。
MOSにアクセスして12.2.0.1.28以上のOPatchファイルをダウンロードする。
ダウンロードしたファイルをWinSCPでローカルマシンからOracle Databaseがインストールされている仮想マシンに移行する。
ORACLE_HOMEにあるOPatchディレクトリを入れ替えるため、既存のOPatchディレクトリの名前を変更する。
mv OPatch OPatch_old
ローカルマシンから移行したパッチファイルをORACLE_HOME上に解凍する。
cd $ORACLE_HOME
unzip ~/file_name.zip
※ file_name.zipはパッチファイル名
$ cd $ORACLE_HOME
$ unzip ~/p6880880_210000_Linux-x86-64.zip
以下のコマンドでバージョンを確認する。
opatch version
$ opatch version
OPatch Version: 12.2.0.1.29
OPatch succeeded.
これでOPatchが先ほどのエラーの修復条件を満たすバージョンに入れ替わった。
パッチを適用する(2回目)
1回目と同様にopatchを実行する。
cd /home/oracle/patchdir/33516412
opatch apply
$ opatch apply
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2511285/b9d9de6c-9b84-0bd3-82e1-96a7f6551a48.png)
Oracle Interim Patch Installerバージョン12.2.0.1.29
Copyright (c) 2022, Oracle Corporation. All rights reserved。
Oracleホーム : /u01/app/oracle/product/21.3.0/dbhome_1
中央インベントリ : /u01/app/oraInventory
元 : /u01/app/oracle/product/21.3.0/dbhome_1/oraInst.loc
OPatchのバージョン : 12.2.0.1.29
OUIのバージョン : 12.2.0.9.0
ログ・ファイルの場所 : /u01/app/oracle/product/21.3.0/dbhome_1/cfgtoollogs/opatch/opatch2022-02-04_16-55-12午後_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches: 33516412
続行しますか。[y|n]
y
User Responded with: Y
All checks passed.
ローカル・システムのこのORACLE_HOME以外で実行しているOracleインスタンスを停止してください。
(Oracleホーム = '/u01/app/oracle/product/21.3.0/dbhome_1')
ローカル・システムにパッチを適用する準備ができましたか。 [y|n]
y
User Responded with: Y
Backing up files...
個別パッチ'33516412'をOH '/u01/app/oracle/product/21.3.0/dbhome_1'に適用中
ApplySession: オプションのコンポーネント[ oracle.network.gsm, 21.0.0.0.0 ] , [ oracle.tfa, 21.0.0.0.0 ] , [ oracle.net.cman, 21.0.0.0.0 ] , [ oracle.ons.cclient, 21.0.0.0.0 ] , [ oracle.rdbms.ic, 21.0.0.0.0 ] , [ oracle.sdo.companion, 21.0.0.0.0 ] , [ oracle.duma, 21.0.0.0.0 ] , [ oracle.network.cman, 21.0.0.0.0 ] , [ oracle.ons.eons.bwcompat, 21.0.0.0.0 ] , [ oracle.jdk, 1.8.0.271.00 ] がOracleホームに存在しないか、上位バージョンが見つかりました。
コンポーネントoracle.rdbms.rsf, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.network.rsf, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.rdbms, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.dbjava.ic, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.dbjava.jdbc, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.dbjava.ucp, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.has.common.cvu, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.ldap.owm, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.ldap.rsf, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.ldap.rsf.ic, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.ldap.security.osdt, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.nlsrtl.rsf, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.oraml.server, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.rdbms.dbscripts, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.rdbms.deconfig, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.rdbms.rman, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.rdbms.rsf.ic, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.sqlplus, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.tfa.db, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.ons, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.ctx.rsf, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.sqlplus.ic, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.sdo.locator, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.assistants.server, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.sdo.locator.jrf, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.ldap.ssl, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.rdbms.dv, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.rdbms.scheduler, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.xdk.parser.java, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.xdk.rsf, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.ctx, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.rdbms.crs, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.sdo, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.rdbms.util, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.ons.ic, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.javavm.server, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.javavm.server.core, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.xdk, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.assistants.acf, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.rdbms.oci, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.assistants.deconfig, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.precomp.common, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.precomp.lang, 21.0.0.0.0にパッチを適用中...
コンポーネントoracle.jdk, 1.8.0.291.09にパッチを適用中...
Patch 33516412 successfully applied.
Log file location: /u01/app/oracle/product/21.3.0/dbhome_1/cfgtoollogs/opatch/opatch2022-02-04_16-55-12午後_1.log
OPatch succeeded.
今回は成功した。
パッチ適用後の作業
適用されているパッチの確認
以下のコマンドでインストールされているすべてのパッチを確認することができる。
opatch lspatches
$ opatch lspatches
33516412;Database Release Update : 21.5.0.0.220118 (33516412)
OPatch succeeded.
以上より、パッチが適用されていることが確認できた。
データベースとリスナーの起動
停止していたデータベースとリスナーを起動する。
データベースを起動するため、sysユーザーでSQL*Plusにログインして以下のコマンドを実行する。
START UP
リスナーを起動するため、oracleユーザーでORACLE_HOME/bin
ディレクトリで以下のコマンドを実行する。
lsnrctl start listener_name
※ listener_nameに登録してあるリスナー名を入力する。リスナー名はORACLE_BASE/homes/Oracleホーム名/network/admin/listenernames.ora
で確認できる。Oracleホーム名は任意であるが、インストーラーによってOraDB21Home1で自動的に命名される。
Oracle Databaseのバージョンの確認
以下のようにSQL*PlusにログインするとOracle Databaseのバージョンが21.3.0.0.0から21.5.0.0.0に変わっていることが確認できる。
$ sqlplus / as sysdba
SQL*Plus: Release 21.0.0.0.0 - Production on 月 2月 7 13:31:32 2022
Version 21.5.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.5.0.0.0
に接続されました。
SQL>
以上で完了!