RACのパッチ適用あれこれ

シングルインスタンスのデータベースとは手順の異なるRACのパッチ適用についていろいろ実験してみる。

前提条件

19c の Grid Infrastructure(GI)環境を想定。DBソフトウェアもインストール済み。

パッチ適用の準備

DBのパッチ適用と同様、OPatchユーティリティをReadmeに記載されている以上のバージョンに置き換えておく。使用するOPatchはDBのものと同じ。

ちなみに、GI側はORACLE_HOMEがrootの所有になっているので、gridユーザでは置き換えができない。rootで置き換えた後に所有者をgrid:oinstallに変更する。

/tmp に OPatchがあると想定した場合の例は以下。

GI側(rootで実行)

# mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_org
# unzip -d $ORACLE_HOME /tmp/p6880880_190000_Linux-x86-64.zip
# chown -R grid:oinstall $ORACLE_HOME/OPatch

DB側(oracleユーザで実行)

$ mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_org
$ unzip -d $ORACLE_HOME /tmp/p6880880_190000_Linux-x86-64.zip

適用対象のパッチも任意のディレクトリに展開しておく。

$ unzip p34130714_190000_Linux-x86-64.zip

ローリング適用

普通はこの方法で行う。RACを構成するすべてのノードを起動したままパッチ適用を開始する。

パッチ適用中のノード以外は通常通り稼働したまま(ダウンタイム無しで)パッチの適用が可能。適用の過程でノードごとにパッチレベルが異なる状態が発生するが問題ない。

普通過ぎて面白みがないので省略。

非ローリング適用

片ノードずつパッチを適用する方法。適用対象のノード以外はCRSを停止させておく必要がある。

opatchauto コマンドに -nonrolling オプションを指定する。

適用手順

パッチを適用したいノード以外のCRSを停止する。

# crsctl stop crs

opatchauto でパッチを適用。

# export PATH=$PATH:$ORACLE_HOME/OPatch
# $ORACLE_HOME/OPatch/opatchauto apply -nonrolling /tmp/34130714

適用が成功すると自動的にCRSが起動するので、一旦停止する。

# crsctl stop crs

次にパッチを適用したいノードでCRSを起動する。

# crsctl start crs

こちらも同様にパッチを適用する。

# export PATH=$PATH:$ORACLE_HOME/OPatch
# $ORACLE_HOME/OPatch/opatchauto apply -nonrolling /tmp/34130714

すべてのノードで同様の作業を行ったら、最後にすべてのノードをCRSが正常に起動することを確認する。

ほかのノードでCRSを起動したまま実行するとどうなるか

以下のエラーで失敗する。

OPATCHAUTO-72087: グリッドはリモート・ホストで実行されています。
OPATCHAUTO-72087: 一部のリモート・ホストでグリッド・サービスが実行されているため、非ローリング・モードでは実行できません。
OPATCHAUTO-72087: リモート・ホストのグリッド・サービスを停止して、非ローリング・モードで続行してください。
OPatchAutoが失敗しました。

適用するノードでCRSを停止したまま実行するとどうなるか

以下のエラーで失敗する。

Clusterware is either not running or not configured. You have the following 2 options:
 1. Configure and start the Clusterware on this node and re-run the tool
 2. Run the tool with '-oh <GI_HOME>' to first patch the Grid Home, then invoke tool with '-database <oracle database name>' or '-oh <RAC_HOME>' to patch the RAC home

OPATCHAUTO-72029: クラスタウェア・ホームが構成されていません。
OPATCHAUTO-72029: クラスタウェアが実行されていないか、構成されていないか、クラスタがソフトウェアのみのGIです
OPATCHAUTO-72029: グリッド・インフラストラクチャ・ソフトウェアがインストールされている場合、opatchautoを'-oh'オプション付きで実行してくださ い。または、opatchautoを実行する前にクラスタウェアを構成して起動してください。

一部のノードだけパッチを適用済みの状態の挙動

1ノードだけパッチを適用済みの状態で、ほかのノードのCRSを起動させたらどうなるのか。

結論としては起動しない。非ローリングモードではどちらか片方のCRSしか起動できない。パッチ適用済みのCRSを先に起動した場合はそちらのみ起動するし、パッチ未適用のCRSを先に起動した場合はそちらのみ起動する。

パッチ適用済みのCRSが起動している場合

パッチ未適用のCRSを起動しようとするとこうなる。

[root@rac19n2 grid]# crsctl start crs -wait
CRS-4123: Oracle高可用性サービス管理下のリソースを起動しています
:
CRS-2672: 'ora.crsd'('rac19n2')の起動を試行しています
CRS-2676: 'ora.crsd'('rac19n2')の起動が成功しました
CRS-2883: Clusterwareスタックの起動中にリソース'ora.crsd'が失敗しました。
CRS-4406: Oracle高可用性サービスの同期起動に失敗しました。
CRS-41053: ファイルの権限の問題についてOracle Grid Infrastructureをチェックしています
PRVH-0116 : Path "/u01/app/19.0.0/grid/lib/acfsreplcrs.pl" with permissions "rw-r--r--" does not have execute permissions for the owner, file's group, and others on node "rac19n2".
PRVH-0111 : Path "/u01/app/19.0.0/grid/lib/acfstoolsdriver.sh" with permissions "rwxr-x---" does not have read permissions for others on node "rac19n2".
PRVH-0113 : Path "/u01/app/19.0.0/grid/lib/acfstoolsdriver.sh" with permissions "rwxr-x---" does not have execute permissions for others on node "rac19n2".
PRVH-0109 : Path "/u01/app/19.0.0/grid/lib/libacfs19.so" with permissions "rw-r--r--" does not have write permissions for the file's group on node "rac19n2".
PRVH-0113 : Path "/u01/app/19.0.0/grid/lib/acfstoolsdriver.sh" with permissions "rwxr-x---" does not have execute permissions for others on node "rac19n2".
CRS-4000: コマンドStartは失敗したか、またはエラーのある状態で完了しました。

この時、crsd.trc には以下のログが出る。

2022-12-03 19:24:10.746 :  OCRMAS:2036389632: th_hub_verify_master_pubdata: Shutdown CacheLocal. Patch Levels don't match. Local Patch Level [3331580692] != Cache Writer Patch Level [896235792]

パッチ未適用のCRSが起動している場合

パッチ適用済みのCRSを起動しようとするとこうなる。

[root@rac19n1 trace]# crsctl start crs -wait
CRS-4123: Oracle高可用性サービス管理下のリソースを起動しています
:
CRS-2672: 'ora.crsd'('rac19n1')の起動を試行しています
CRS-2676: 'ora.crsd'('rac19n1')の起動が成功しました
CRS-2883: Clusterwareスタックの起動中にリソース'ora.crsd'が失敗しました。
CRS-4406: Oracle高可用性サービスの同期起動に失敗しました。
CRS-41053: ファイルの権限の問題についてOracle Grid Infrastructureをチェックしています
CRS-4000: コマンドStartは失敗したか、またはエラーのある状態で完了しました。

この時も、crsd.trc には同じエラーが出る。

個別パッチとRU

例えば、19.16 RUが適用済みの環境に、個別パッチ(33606850)が当たっていたとする。

(DB側)

$ $ORACLE_HOME/OPatch/opatch lspatches
33606850;AIM ORA-600 [KCBBXSV_7] - KCBBXSV AND INSTANCE CRASHED AFTER DATA FILE RESIZING
34086870;OJVM RELEASE UPDATE: 19.16.0.0.220719 (34086870)
34160635;OCW RELEASE UPDATE 19.16.0.0.0 (34160635)
34133642;Database Release Update : 19.16.0.0.220719 (34133642)

OPatch succeeded.

(GI側)

$ $ORACLE_HOME/OPatch/opatch lspatches
33606850;AIM ORA-600 [KCBBXSV_7] - KCBBXSV AND INSTANCE CRASHED AFTER DATA FILE RESIZING
34318175;TOMCAT RELEASE UPDATE 19.0.0.0.0 (34318175)
34160635;OCW RELEASE UPDATE 19.16.0.0.0 (34160635)
34139601;ACFS RELEASE UPDATE 19.16.0.0.0 (34139601)
34133642;Database Release Update : 19.16.0.0.220719 (34133642)
33575402;DBWLM RELEASE UPDATE 19.0.0.0.0 (33575402)

OPatch succeeded.

この 33606850 は上位のRU(19.18)に修正が含まれているのだが、このようなケースで上位のRU(19.18)を当てる場合、33606850を事前にロールバックする必要はない。おもむろに19.18を当てると以下のように自動的にロールバックされて適用済みパッチの一覧からは消える。

(DB側)

$ $ORACLE_HOME/OPatch/opatch lspatches
34768559;OCW RELEASE UPDATE 19.18.0.0.0 (34768559)
34765931;DATABASE RELEASE UPDATE : 19.18.0.0.230117 (REL-JAN230131) (34765931)
34086870;OJVM RELEASE UPDATE: 19.16.0.0.220719 (34086870)

OPatch succeeded.

(GI側)

$ $ORACLE_HOME/OPatch/opatch lspatches
34863894;TOMCAT RELEASE UPDATE 19.0.0.0.0 (34863894)
34768569;ACFS RELEASE UPDATE 19.18.0.0.0 (34768569)
34768559;OCW RELEASE UPDATE 19.18.0.0.0 (34768559)
34765931;DATABASE RELEASE UPDATE : 19.18.0.0.230117 (REL-JAN230131) (34765931)
33575402;DBWLM RELEASE UPDATE 19.0.0.0.0 (33575402)

OPatch succeeded.

ではこの状態で適用したRU(19.18)をロールバックするとどうなるかというと、個別パッチの再適用まではやってくれないようだ。元のRU(19.16)には戻る。

(DB側)

$ $ORACLE_HOME/OPatch/opatch lspatches
34086870;OJVM RELEASE UPDATE: 19.16.0.0.220719 (34086870)
34160635;OCW RELEASE UPDATE 19.16.0.0.0 (34160635)
34133642;Database Release Update : 19.16.0.0.220719 (34133642)

OPatch succeeded.

(GI側)

$ $ORACLE_HOME/OPatch/opatch lspatches
34318175;TOMCAT RELEASE UPDATE 19.0.0.0.0 (34318175)
34160635;OCW RELEASE UPDATE 19.16.0.0.0 (34160635)
34139601;ACFS RELEASE UPDATE 19.16.0.0.0 (34139601)
34133642;Database Release Update : 19.16.0.0.220719 (34133642)
33575402;DBWLM RELEASE UPDATE 19.0.0.0.0 (33575402)

OPatch succeeded.

コメント