3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OPatchを使用してパッチを適用してみた

Last updated at Posted at 2022-02-07

はじめに

今回は以前にインストールした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のタブをクリックする。
image.png
"Search"タブの"Product or Family(Advanced)"をクリックし、検索したい製品名とリリースをプルダウンから指定する。今回は以下のように選択した。選択後"Search"ボタンをクリックする。
image.png
パッチの検索結果から適用したいパッチを選択する。
image.png
"Download"をクリックする。
image.png
ダウンロードリンクをクリックしてダウンロードする。
image.png
これでダウンロード完了。

パッチファイルをローカルマシンから仮想マシンに移行する

WinSCPを使用してローカルマシンからOracle Database 21c(21.3.0.0.0)がインストールされている仮想マシン(Oracle Linux 8)のoracleユーザーのホームディレクトリにダウンロードしたパッチファイルを移行する。
image.png

データベースとリスナーを停止する

今回適用するパッチはデータベースとリスナーを停止する必要があるため以下の操作をそれぞれ行う。
リスナーを停止するため、oracleユーザーでORACLE_HOME/binディレクトリで以下のコマンドを実行する。

oracleユーザー
lsnrctl stop listener_name

※ listener_nameに登録してあるリスナー名を入力する。リスナー名はORACLE_BASE/homes/Oracleホーム名/network/admin/listenernames.oraで確認できる。Oracleホーム名は任意であるが、インストーラーによってOraDB21Home1で自動的に命名される。

データベースを停止するため、sysユーザーでSQL*Plusにログインして以下のコマンドを実行する。

SQL*Plus
SHUTDOWN IMMEDIATE

PATHを通す

以下を実行してOPatchの実行に必要なPATHを通す。既に設定済みであれば不要である。

oracleユーザー
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に作成した。

oracleユーザー
mkdir patchdir

パッチファイルを解凍する

作成したディレクトリに移動して、ローカルマシンから移行したパッチファイルを解凍する。

oracleユーザー
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コマンドを実行する。

oracleユーザー
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コマンドでパッチを適用する。

oracleユーザー
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ファイルをダウンロードする。
image.png
ダウンロードしたファイルをWinSCPでローカルマシンからOracle Databaseがインストールされている仮想マシンに移行する。
image.png
ORACLE_HOMEにあるOPatchディレクトリを入れ替えるため、既存のOPatchディレクトリの名前を変更する。

oracleユーザー
mv OPatch OPatch_old

ローカルマシンから移行したパッチファイルをORACLE_HOME上に解凍する。

oracleユーザー
cd $ORACLE_HOME
unzip ~/file_name.zip

※ file_name.zipはパッチファイル名

実行例
$ cd $ORACLE_HOME
$ unzip ~/p6880880_210000_Linux-x86-64.zip

以下のコマンドでバージョンを確認する。

oracleユーザー
opatch version
実行例
$ opatch version
OPatch Version: 12.2.0.1.29

OPatch succeeded.

これでOPatchが先ほどのエラーの修復条件を満たすバージョンに入れ替わった。

パッチを適用する(2回目)

1回目と同様にopatchを実行する。

oracleユーザー
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.

今回は成功した。

パッチ適用後の作業

適用されているパッチの確認

以下のコマンドでインストールされているすべてのパッチを確認することができる。

oracleユーザー
opatch lspatches
実行例
$ opatch lspatches
33516412;Database Release Update : 21.5.0.0.220118 (33516412)

OPatch succeeded.

以上より、パッチが適用されていることが確認できた。

データベースとリスナーの起動

停止していたデータベースとリスナーを起動する。
データベースを起動するため、sysユーザーでSQL*Plusにログインして以下のコマンドを実行する。

SQL*Plus
START UP

リスナーを起動するため、oracleユーザーでORACLE_HOME/binディレクトリで以下のコマンドを実行する。

oracleユーザー
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に変わっていることが確認できる。

oracleユーザー
$ 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> 

以上で完了!

3
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?