OPatchは、Oracleのソフトウェアに個別パッチを適用またはロールバックするユーティリティです。パッチを適用する手動プロセスは、バイナリ・パッチ適用と呼ばれます。ビット・パッチ適用の場合は、OPatchユーティリティを使用して次の操作を実行できます。
注意: パッチを適用する前には、必ず特別な手順について記載された、パッチのREADMEを参照してください。パッチ操作を実行する前に、 |
ORACLE_HOMEリリースをサポートしているOPatchのバージョンを使用する必要があります。たとえば、12.0.1 Oracleホームにパッチを適用する場合は、OPatchバージョン12.0.1を使用します。Oracleホームがバージョン11.2である場合は、OPatchバージョン11.2を使用します。
My Oracle Supportからダウンロード可能な最近リリースされたOPatch for 12.1リリースを使用することをお薦めします(パッチ6880880)。12.1.0.1.0リリースのARUリンクを選択します。
https://updates.oracle.com/download/6880880.html
最新バージョンのOPatchの参照方法に関するサポート・ドキュメントも参照できます(ドキュメントID 224346.1)。このドキュメントには、MOSからOPatchツールをダウンロードする方法に関するインストラクション・ビデオへのリンクが含まれています。
OPatchコマンドおよび使用可能なオプションを使用する前に、OPatchの前提条件が満たされていることを確認する必要があります。
OPatchユーティリティを使用してGI/RACホームにパッチを適用する際には、通常次の手順を実行します。
OPatchによりGI/RACホームが存在するかどうかが検証されます。環境変数ORACLE_HOME
が、パッチを適用しようとしている製品のGI/RACホームに設定されている必要があります。環境変数の設定の詳細は、各ベンダーのドキュメントを参照してください。
注意: Oracle Universal Installerのバイナリおよびインベントリが、パッチを適用するホーム内に存在する必要があります。 |
使用されるその他の環境変数は次のとおりです。
OPATCH_DEBUG
- OPatchが実行する必要のあるロギングの量を指定するブール設定。
PATH
— GI/RACホームのパス情報。
注意: $ORACLE_HOME/OPatchを$PATHに追加すると、任意のディレクトリからOPatchコマンドを実行する場合に便利です。 |
次のステップは、システムにすでにインストールされている項目を確認することです。これには、opatch
lsinventory
コマンドをpatch
またはpatch_id
のいずれかのオプションで使用します。
このコマンドの詳細は、「lsinventory
」を参照してください。
現在のシステム構成が適用するパッチに適切なものであることを確認したら、パッチを適用する前にOPatchが実行する操作を表示して、パッチの適用前にすべてのシステム前提条件が満たされているかどうかを確認することをお薦めします。これには、OPatchの-report
オプションを使用して、アクションを実際には実行せずに、OPatchが実行するパッチ適用アクションをすべて出力します。
-reportオプションの詳細は、「OPatchの構文およびコマンド」を参照してください。
システムにパッチが正常に適用できることを確認したら、OPatchを使用してパッチを適用します。これには、OPatchのapply
コマンドを使用します。
このコマンドの詳細は、「apply
」を参照してください。
システムにパッチを適用したら、すべてのパッチが正常に適用されていることを確認するための最終チェックを実行する必要があります。これには、OPatchのlsinventory
コマンドをpatch
またはpatch_id
のいずれかのオプションで使用します。このOPatchコマンドの詳細は、「lsinventory
」を参照してください。
前提条件チェックを確認したら、OPatchを使用してパッチを適用します。
OPatchユーティリティは、$Oracle_Home/OPatch
ディレクトリにあります。このユーティリティは、様々なコマンドおよびオプションを指定して実行できます。OPatchで使用できるコマンド・オプションの完全なリストは、付録A「OPatchの構文およびコマンド」を参照してください。
前述の一般的なパッチ適用ワークフローに従って、単一パッチを適用します。
パッチをダウンロードしたら、次のコマンドを使用して適用できます(ステップ5)。
# opatch apply <patch directory location>/<patch ID>
例:
# opatch apply /tmp/patch/12345678
適用する必要があるすべてのパッチの場所を含むテキスト・ファイルを作成できます。OPatchを使用してファイルを参照し、パッチを適用します。
パッチの場所に関するテキスト・ファイルを作成します。エントリでは、各行にそれぞれのパッチの場所が含まれている必要があります。
vi patches.txt /tmp/patchlocation1/12345678 /tmp/patchlocation2/12365478 /scratch/patchlocation3/32165487
変更を保存します。
OPatchを使用してパッチを適用します。
# opatch napply - -phBaseFile <location of text file>
例:
#opatch napply - -phBaseFile /tmp/patches/patches.txt
OPatchは、パッチを適用する場合に、以前に適用したパッチとの競合を検出およびレポートします。競合がある場合、パッチの適用は失敗します。OPatchの-force
オプションを使用して、このエラーをオーバーライドできます。-force
を指定すると、インストーラは最初に競合パッチをロールバックしてから、目的の個別パッチのインストールに進みます。
不具合の競合が発生し、競合するパッチの削除が必要になる場合があります。このプロセスは、パッチのロールバックと呼ばれます。パッチのインストール時、OPatchは、新規パッチで置換されるすべてのファイルのコピーを保存してから、これらのファイルの新規バージョンをロードし、$ORACLE_HOME/.patch_storage
に格納します。これらの保存されたファイルはロールバック・ファイルと呼ばれ、パッチのロールバックを可能にするためのキーとなります。パッチをロールバックする場合、これらのロールバック・ファイルがシステムにリストアされます。パッチのロールバック・プロセスを十分に理解している場合、必要な操作は-force
フラグを使用してデフォルトの動作をオーバーライドすることのみです。パッチをロールバックするには、次のコマンドを実行します。
$ OPatch/opatch rollback -id <Patch_ID>
別々のパッチ内の複数の修正により同じファイルが編集されているが、単一のエンティティとして一度にテストされていない場合、パッチの競合が発生します。OPatchおよびOPatchautoは、これらの状況を識別して競合を回避するために役に立ちます。パッチの競合が発生したが、その競合をドキュメント化されたサポート手順を使用しても解決できない場合、MOSが技術的な支援として信頼できるソースになります。競合の解決には、パッチ適用の問題に対応するためのサービス・リクエストのファイリングおよびマージ・ラベル・リクエスト(MLR)パッチの取得が必要になる場合があります。解決策が見つかったら、OPatchを使用して修正済のパッチを適用します。
パッチを処理する場合、パッチのコンテンツとGI/RACホームの状態に応じて、考えられるシナリオが4つ存在します。
次の表では、これら4つの状況と推奨アクションについて説明します。
GI/RACホームとパッチ・コンテンツ | 説明 | アクション |
---|---|---|
GI/RACホーム>パッチ | パッチよりもGI/RACホーム内に多数の不具合修正が存在します。パッチを適用する必要はありません。 | 何もしない |
GI/RACホーム<パッチ | パッチよりもGI/RACホーム内の不具合修正の方が少数です。パッチを適用する必要があります。 | パッチを適用します |
GI/RACホーム=パッチ | GI/RACホームとパッチの不具合修正が同数です。 | 何もしない |
GI/RACホームとパッチに共通部分あり | 特定の状況下では、不具合修正が重なっている場合とは異なり、パッチを適用する決定が困難な場合があります。たとえば、GI/RACホーム内の不具合修正が1、2、3および4であるとします。適用するパッチに含まれている不具合修正は、3、4、5および6です。この場合、不具合修正3および4は、GI/RACホームとパッチの両方に存在します。パッチをインストールすると、不具合修正3および4が失われます。パッチをインストールすると、一部の不具合修正が失われます。 | Oracleサポートに連絡するか、またはMOSパッチ計画機能を使用して競合を解決します。 |
前述したように、すべてのパッチが相互に互換性があるとはかぎりません。これを競合状況といいます。OPatchはこのような状況を検出し、競合が検出された場合にエラーを生成します。次の項では、表に示したパッチおよび競合の状態について詳細に説明します。
OPatchは、次のパッチの競合状態を検出できます。
この場合、GI/RACホームには、他の不具合修正に加えてパッチの不具合修正がすでに含まれています。
推奨アクション: 何もしない。
例
次の使用例を考えてみます。
GI/RACホームにインストールされたパッチAは、不具合の1、2および3を修正しました。
GI/RACホームにインストールされたパッチBは、不具合の10、11および12を修正しました。
これからインストールするパッチDは、不具合の1および2を修正します。
パッチDはパッチAのサブセットです。
skip_subsetオプションの使用
以前にGI/RACホームに適用され、現在適用する他のパッチのサブセットになっているパッチを省略する場合、
napplyの
skip_subsetオプションを使用できます。
たとえば、不具合の1および2を修正するパッチAにnapply
を昨日使用した場合、不具合の1を修正するパッチBと不具合の1、2および3を修正するパッチCに対してskip_subset
オプションを指定してnapply
この場合、サブセット・パッチAは省略され、パッチCがパッチAのスーパーセットになります。
を今日使用するとします。
次の例では、skip_subset
フラグを使用した際に表示されるメッセージ出力を示します。
$ OPatch/opatch napply /<path to patch>/ -id 100,101 -skip_duplicate -skip_subset Oracle Interim Patch Installer version 11.1.0.9.10 Copyright (c) 2012, Oracle Corporation. All rights reserved. Oracle Home : /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1 Central Inventory : /<path to oraInventory directory>/oraInventory from : /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1//oraInst.loc OPatch version : 11.1.0.9.10 OUI version : 11.1.0.7.0 Log file location : /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1/cfgtoollogs/opatch/opatch2013-05-14_11-31-29AM_1.log Verifying environment and performing prerequisite checks... Conflicts/Supersets for each patch are: Patch : 100 Bug SubSet of 101 Subset bugs are: 111 Patch : 101 Bug Superset of 100 Super set bugs are: 111Skip these patches because they are subset of other patches in the list: 100 Proceed with these patches: 101 Checking skip_duplicate Checking skip_subset OPatch found that the following patches are not required. They are either subset of the patches in Oracle Home (or) subset of the patches in the given list (or) duplicate : 100 OPatch continues with these patches: 101 Do you want to proceed? [y|n] y User Responded with: Y All checks passed. Provide your email address to be informed of security issues, install and initiate Oracle Configuration Manager. Easier for you if you use your My Oracle Support Email address/User Name. Visit http://www.oracle.com/support/policies.html for details. Email address/User Name: You have not provided an email address for notification of security issues. Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]: Y Backing up files... Applying interim patch '101' to OH '/<path to OH directory>/oraclehome/11.1.0.6/dbhome_1' Patching component oracle.rdbms.rsf, 11.1.0.7.0... Verifying the update... Patches 101 successfully applied. OPatch Session completed with warnings. Log file location: /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1/cfgtoollogs/opatch/opatch2013-05-14_11-31-29AM_1.log OPatch completed with warnings.
表2-1は、applyコマンドおよびnapplyコマンドの予期される動作を示しています。
表2-1 予期される競合の動作
コマンド | GI/RACホーム>パッチ | GI/RACホーム<パッチ | GI/RACホーム=パッチ | GI/RACホームとパッチに共通部分あり |
---|---|---|---|---|
apply |
OPatchは、自動ロールバックの次にapplyを実行します。 |
マージ・リクエストの後、OPatchは、自動ロールバックの次にapplyを実行します。 |
OPatchは、自動ロールバックの次にreapplyを実行します。 |
OPatchは競合をレポートします。マージ・リクエストの後、OPatchは、自動ロールバックの次にapplyを実行します。 |
napply |
OPatchは、自動ロールバックの次にapplyを実行します。 |
OPatchはサブセットをレポートし、サブセットのパッチを省略します。その他のパッチを引き続き適用します。 |
OPatchは、自動ロールバックの次にreapplyを実行します。 |
OPatchは競合をレポートし、不具合の競合のパッチを適用せずに再実行するように求めます。 -forceオプションを使用し、競合パッチを自動ロールバックして、新しいパッチを適用するようにOPatchに指示することができます。 |
napply
の場合は複数のパッチが適用されているため、パッチとGI/RACホームの競合の場合と同様に、パッチがお互いに競合することがあります(OH>パッチ、OH<パッチ、OH=パッチおよびOHとパッチに共通部分あり)。パッチ間の競合が発生した場合は、同じ推奨アクションを適用する必要があります。
次の例では、<patch_location>
ディレクトリの下にあるすべてのパッチを適用します。OPatchは、重複するパッチおよびサブセット・パッチ(<patch_location>
の下にあるパッチで、GI/RACホームにインストールされているパッチのサブセット)を省略します。
次の例では、<patch_location>
ディレクトリの下にあるパッチ1、2および3を適用します。OPatchは、重複するパッチおよびサブセット・パッチ(<patch_location>
の下にあるパッチで、GI/RACホームにインストールされているパッチのサブセット)を省略します。
パッチに、すでにGI/RACホームで修正されている不具合修正および追加の不具合修正が含まれている場合、このパッチはすでにGI/RACホームに適用されているパッチのスーパーセットであるとみなされます。パッチがスーパーセットの状態であることが検出された場合、エラーの状態であるとは判断されません。すべてのサブセット・パッチがシステムから削除され、新しいパッチが適用されます。
推奨アクション: パッチを適用します。
例
次の使用例を考えてみます。
GI/RACホームにインストールされたパッチAは、不具合の1、2および3を修正しました。
GI/RACホームにインストールされたパッチBは、不具合の10、11および12を修正しました。
これからインストールするパッチCは、不具合の1、2、3および4を修正します。
パッチCは、パッチAのスーパーセットとみなされます。
-no_bug_supersetフラグの使用
現在のパッチで修正する不具合が、GI/RACホーム・ディレクトリにインストールされているパッチで修正済の不具合のスーパーセットであるか同一の場合にOPatchをエラーにするには、-no_bug_superset
フラグを使用します。
$ OPatch/opatch apply -no_bug_superset <Path_To_Patch>
次の例の出力は、-no_bug_superset
フラグを使用したときに表示されるメッセージを示しています。
$ OPatch/opatch apply -no_bug_superset /<path_to_patch>/patch101_CP1/ Oracle Interim Patch Installer version 11.1.0.9.10 Copyright (c) 2012, Oracle Corporation. All rights reserved. Oracle Home : /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1 Central Inventory : /<path to oraInventory directory>/oraInventory from : /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1//oraInst.loc OPatch version : 11.1.0.9.10 OUI version : 11.1.0.7.0 Log file location : /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1/cfgtoollogs/opatch/opatch2013-05-14_11-34-19AM_1.log Applying interim patch '101' to OH '/<path to OH directory>/oraclehome/11.1.0.6/dbhome_1' Verifying environment and performing prerequisite checks... Interim patch 101 is a superset of the patch(es) [ 100 ] in the Oracle Home OPatch system modification phase did not start: Interim patch 101 is a superset of the patch(es) [ 100 ] in OH /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1 Log file location: /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1/cfgtoollogs/opatch/opatch2013-05-14_11-34-19AM_1.log OPatch stopped on request.
この場合、パッチは、別のパッチで修正されたものと同じセットの不具合を修正します。たとえば、不具合の1、2および3を修正するパッチAを適用した後、さらに不具合の1、2および3を修正するパッチBを適用する場合、パッチBはパッチAの重複になります。パッチは常にそれ自体の重複になります。
skip_duplicateオプションの使用
このオプションを指定する場合、OPatchは適用するパッチのリストから重複パッチを排除します。たとえば、前述のパッチAに対してnapply
を昨日使用し、パッチAおよび他のパッチに-skip_duplicate
オプションを指定したnapply
を今日使用すると、重複パッチAが省略されます。
この場合、パッチの競合状態は、現在のパッチで修正される一連の不具合が、以前にインストールしたパッチの1つ以上ですでに修正されている不具合の一部と共通している場合に発生します。
推奨アクション: Oracleサポートに連絡します。MLRパッチが必要になる場合があります。
例
次に、パッチ適用時にこのパッチの競合状態が発生する例を示します。この例では、opatch apply
がエラー・コード56で失敗しています。
$ OPatch/opatch apply /<path to patch directory>/patch100_CP0/ Oracle Interim Patch Installer version 11.1.0.9.10 Copyright (c) 2012, Oracle Corporation. All rights reserved. Oracle Home : /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1 Central Inventory : /<path to oraInventory>/oraInventory from : /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1//oraInst.loc OPatch version : 11.1.0.9.10 OUI version : 11.1.0.7.0 Log file location : /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1/cfgtoollogs/opatch/100_May_14_2013_12_18_10/apply2013-05-14_12-18-09PM_1.log Applying interim patch '100' to OH '/<path to OH directory>/oraclehome/11.1.0.6/dbhome_1' Verifying environment and performing prerequisite checks... Interim patch 100 is a subset of the patch(es) [ 101 ] in OH /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1. All the fixes of this patch 100 is already present in the Oracle Home. No need to apply this patch. Log file location: /<path to OH directory>/oraclehome/11.1.0.6/dbhome_1/cfgtoollogs/opatch/100_May_14_2013_12_18_10/apply2013-05-14_12-18-09PM_1.log Recommended actions: The fixes by this patch are currently in the Oracle Home. There is no need to apply this patch. OPatch failed with error code 56