忘れかけのIT備忘録

今まで学んできた知識や小技、なるほど!と思ったことをメモするブログです。

Oracleのパッチ

今回はOracleのパッチについて調査しました。

パッチとは
ラクル社が提供する製品のセキュリティホールや不具合(バグ)を修正するものです。
パッチは製品のリリース(バージョン)ごとに提供されていますが、12cR1までと12cR2以降で提供されるパッチの種類が変わりました。

なお、パッチはMOS(My Oracle Support)からダウンロードする必要があります(つまり、サポート契約しないと入手できません)

【補足】
Long Term Support
製品の特定のバージョンを長期間安定的にサポートする
サポート期間は開発元の方針や製品の種類によって異なるが、LTSは数年に設定することが多い
なお、通常のサポート期間(STS:Short Term Support)は数ヶ月から1年前後が多い

リリース(バージョン)番号
従来型リリースモデルと年次リリースモデルでリリース番号の読み方が変わりました。

パッチの種類
12cR1まで(従来型リリースモデル)と12cR2以降(年次リリースモデル)で提供されるパッチの種類が変わっています。

●12cR1まで(従来型リリースモデル)
PSR、PSU、SPU、個別パッチなどが提供されます。
パッチの修正量は大きいものから「PSR > PSU > SPU > 個別パッチ」となります。

PSR(Patch Set Release)
年次またはそれ以上(原則1~2年ごと)に提供される最も基本的な重要パッチ
主に下記の内容が含まれている
セキュリティホール修正
・不具合(バグ)修正(バグフィックス
・新機能
オプティマイザ修正
・新規パラメータ
PSR適用後、リリース番号の4桁目のバージョン番号が変わる
(例)11.2.0.4.0の場合、4がバージョン番号

PSU(Patch Set Update)
毎年四半期ごと(1月/4月/7月/10月)に提供される累積パッチ
主に下記の内容が含まれている
セキュリティホール修正
・不具合(バグ)修正(バグフィックス
パッチ適用後、リリース番号の5桁目のバージョン番号が変わる
(例)11.2.0.4.0の場合、0がバージョン番号

SPU(Security Patch Update、旧Critical Patch Update)
毎年四半期ごと(1月/4月/7月/10月)に提供される累積パッチ
PSUからセキュリティホール修正のみ抽出したパッチ
主に下記の内容が含まれている
セキュリティホール修正
SPU適用後、OPatch(opatch lsinventoryコマンド)で適用したSPU番号を確認できる
※SPUはPSUに含まれることが多いため、PSUを適用した場合、別途SPUを適用するか確認が必要
※12.1.0.1以降はSPUはPSUに含まれるため、SPU単体で提供されない

個別パッチ(Interim Patch、PSE
不定期で提供されるパッチ
1つの不具合に対して特別に提供されるパッチ
PSRやPSUの修正に含まれていない不具合が発生しているが、次のパッチリリースまでデータベースを運用することが困難な場合、Oracleサポートから特別に提供される
個別パッチを適用した場合、他のパッチ適用時にコンフリクト(競合)が発生する可能性がある
たとえば個別パッチAが適用済みで個別パッチBを適用しようとしたが、パッチBで修正されるモジュールがパッチAと同じモジュールだったため、コンフリクトが発生するなど
パッチは同じモジュールを含むパッチを複数適用できない(適用済みパッチと同じモジュールを含むパッチを適用するとコンフリクトが発生する)
将来的に個別パッチはPSRやPSUなどに含まれる場合もあるため、緊急時を除き、積極的に適用しないでも良いと思います
個別パッチ適用後、OPatch(opatch lsinventoryコマンド)で適用した個別パッチ番号を確認できる

BP(Bundle Patch)
Oracle ExadataやOracle Database Appliance、Windowsなど特定のプラットフォーム向け提供される累積パッチ
Windows Bundle Patch(Patch X)
Windowsに提供される累積パッチ
WindowsではPSUやSPU、個別パッチは提供されていない
代わりに上記の修正が含まれているWindows Bundle Patchが提供されている
DBBP(Database Proactive Bundle Patch)
ExadataやDatabase Applianceなどに提供される累積パッチ
Grid Infrastructureとデータベースの両方に対する修正を含む

●12cR2以降(年次リリースモデル)
RU、RUR、個別パッチなどが提供されます。

RU(Release Updates)
毎年四半期ごと(1月/4月/7月/10月)に提供される累積パッチ
特定のリリースに対する追加の修正が含まれる
従来型リリースモデルのPSUと同様の位置づけとなっているが、RUはオプティマイザに対する修正も含まれる
主に下記の内容が含まれている
セキュリティホール修正
・不具合(バグ)修正(バグフィックス
オプティマイザ修正

RUR(Release Update Revisions)
毎年四半期ごと(1月/4月/7月/10月)に提供される累積パッチ
特定のRUに対する追加の修正が含まれる
特定のRUに対して最大2つ提供される
主に下記の内容が含まれている
セキュリティホール修正

Oracle 12cR2ファミリー
従来型リリースモデルは同一のリリースにおいて複数のリリース番号を持つパッチセットが提供されていた。
(例)
11gR2の場合
初期リリース:11.2.0.1
パッチセット:11.2.0.2 → 11.2.0.3 → 11.2.0.4

12cR2以降
12cR2(12.2.0.1):従来型リリースモデルの初期リリース相当
18c:従来型リリースモデルのパッチセットの12.2.0.2相当
19c:従来型リリースモデルのパッチセットの12.2.0.3相当

12cR2以降は18c、19cと呼ばれているが、従来型リリースモデルと密接な関係があるため、Oracle12cR2ファミリーとも呼ばれる

パッチ提供期間
パッチはPremier Support期間中(リリースから5年間)、Extended Supportを契約している場合はExtended Support期間中(リリースから最長8年間)は提供されます
※パッチの提供可否については必ずOracleサポートへ確認して正確な情報を入手してください

パッチ適用方法
適用するパッチの種類で適用方法や適用ツールが異なります。
OpatchはOracle Database製品に含まれていますが、MOSから最新版をダウンロードすることを推奨されています(OPatchのバージョンが古いとパッチ適用に失敗する可能性もある)

【補足】
アウトオブプレース
新規に製品ホーム作成後、パッチをインストールする方法
インストール完了後、既存ホームで稼働しているサービスを停止し、製品ホームを切り替える
・インプレースに比べ、サービス停止時間が短い
・新規ホームを作成するため、新規パッチを格納する領域も必要

インプレース
既存ホームで稼働しているサービス停止後、既存の製品ホームにパッチをインストール(上書き)する方法
・アウトオブプレースに比べ、サービス停止時間が長い
・新規パッチ格納用の領域は不要

OPatch(Oracleパッチ適用ユーティリティ)
Oracle製品ホームにパッチを適用したり、適用済みパッチを管理するツールです。
主に下記の機能があります
・パッチの適用
・パッチのロールバック(適用済みパッチの取り消し)
・コンフリクト(競合)チェック

パッチ適用時は下記のコマンドを使用します。
opatchコマンド
Oracleホームに対してパッチを適用する
パッチ適用対象Oracleホームの所有者(たとえばoracleユーザ)で実行する

datapatchコマンド
opatchコマンド実行後、パッチ適用に伴う修正をデータベースに適用する
データベースの内部構造を変更するSQLスクリプトが実行される

opatchautoコマンド
複数の製品ホームに対して一括でパッチを適用する
たとえばRestart環境やRAC環境などGrid Infrastructure製品とOracle Database製品が導入されている場合、GridホームとOracleホームに対して一括でパッチを適用する(datapatchも自動で実行される)
rootユーザで実行する
ローリングアップグレード(デフォルト)で適用するため、RAC環境の場合、パッチ適用に伴う停止時間を短縮できる
Windowsでは使用不可

【補足】ローリングアップグレード
複数ノードで構成されるクラスタ環境において1ノードずつパッチを適用する方法(シングル環境、Restart環境では使用不可)
パッチ適用に伴うサービス停止時間を最小限に抑えることができるため、可用性の観点で有効な方法
1ノードずつパッチを適用するため、一時的にノード間で新しいパッチと古いパッチが混在する状況になる
※ローリングアップグレードできるパッチとできないパッチがあるため、適用時はパッチのREADMEをよく読むこと(異なるバージョンが混在できるパッチのみ適用可能)

個人ではサポート契約していないため、パッチのダウンロード、パッチ適用の検証はできませんが、Oracle製品インストール直後のパッチバージョンだけ確認してみます。

■検証環境
OS:Oracle Linux 6.5
DB/GI:Oracle Database 12c Release 1 (12.1.0.2.0) Enterprise Edition
※2ノードRAC(管理者管理型DB)

■前提
・PSR 12.1.0.2.0のみ適用済み(フルインストール)
・上記以外のパッチ適用なし
※フルインストール:11.2.0.2以降のPSRの提供方法。Oracle製品のインストールと同時にPSRも自動適用するため、ベースリリースはインストール不要となる。
(例)12cR1をインストールする場合、予めベースリリース12.1.0.1.0にPSR 12.1.0.2.0が適用された状態でダウンロードできるため、ベースリリース12.1.0.1.0をダウンロード後、PSR 12.1.0.2.0を適用するという処理が省略できる。ただし、ベースリリースとPSRがセットになっているため、ファイルサイズも大きくなる

■検証パターン
①製品のパッチバージョン確認(Gridホーム)
②製品のパッチバージョン確認(Oracleホーム)

■検証
①製品のパッチバージョン確認(Gridホーム)
Grid Infrastructure製品(Gridホーム)に適用されているパッチバージョンを確認します

【検証手順】
1. パッチバージョン確認

【作業ログ】

1. パッチバージョン確認
[grid@node1 ~]$ opatch lsinventory

Oracle Interim Patch Installerバージョン12.1.0.1.3
Copyright (c) 2023, Oracle Corporation.  All rights reserved。


Oracle Home       : /u01/app/12.1.0/grid
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/12.1.0/grid/oraInst.loc
OPatch version    : 12.1.0.1.3
OUI version       : 12.1.0.2.0
Log file location : /u01/app/12.1.0/grid/cfgtoollogs/opatch/opatch2023-04-21_11-41-25午前_1.log

Lsinventory Output file location : /u01/app/12.1.0/grid/cfgtoollogs/opatch/lsinv/lsinventory2023-04-21_11-41-25午前.txt

--------------------------------------------------------------------------------
インストールされた最上位製品(1):

Oracle Grid Infrastructure 12c                                       12.1.0.2.0
このOracleホームには1の製品がインストールされています。


このOracleホームには仮パッチがインストールされていません。


--------------------------------------------------------------------------------
★PSR 12.1.0.2.0が適用されている。PSUなどは適用していないため、「このOracleホームには仮パッチがインストールされていません。」と出ている

 

②製品のパッチバージョン確認(Oracleホーム)
Database製品(Oracleホーム)に適用されているパッチバージョンを確認します

【検証手順】
1. パッチバージョン確認

【作業ログ】

1. パッチバージョン確認
[oracle@OTDCNA01 ~]$ opatch lsinventory

Oracle Interim Patch Installerバージョン12.1.0.1.3
Copyright (c) 2023, Oracle Corporation.  All rights reserved。


Oracle Home       : /opt/app/oracle/product/12.1.0/dbhome_1
Central Inventory : /opt/app/oraInventory
   from           : /opt/app/oracle/product/12.1.0/dbhome_1/oraInst.loc
OPatch version    : 12.1.0.1.3
OUI version       : 12.1.0.2.0
Log file location : /opt/app/oracle/product/12.1.0/dbhome_1/cfgtoollogs/opatch/opatch2023-04-21_10-52-15午前_1.log

Lsinventory Output file location : /opt/app/oracle/product/12.1.0/dbhome_1/cfgtoollogs/opatch/lsinv/lsinventory2023-04-21_10-52-15午前.txt

--------------------------------------------------------------------------------
インストールされた最上位製品(1):

Oracle Database 12c                                                  12.1.0.2.0
このOracleホームには1の製品がインストールされています。


このOracleホームには仮パッチがインストールされていません。


--------------------------------------------------------------------------------
★PSR12.1.0.2.0が適用されている。PSUなどは適用していないため、「このOracleホームには仮パッチがインストールされていません。」と出ている

 

SQLでもバージョンは確認できますが、確認できるのはPSRのみでPSUなどのバージョンは確認できません
SQL> select BANNER from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
CORE    12.1.0.2.0      Production
TNS for Linux: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production

 

■参考資料
OPatchautoを使用したパッチ適用オーケストレーション
OPatchを使用したバイナリ・パッチ適用
Oracle Databaseのリリース番号の概要
用語集
Oracle Databaseのリリース番号について
https://www.oracle.com/webfolder/technetwork/jp/ondemand/ddd2014/B2-4.pdf(パッチ計画のベスト・プラクティスとパッチ適用時の性能トラブルを未然に防ぐ現場ワザ)
Oracle Database 最新情報と年次リリースモデルに関して - Speaker Deck
データベース・パッチセットの種類と特徴について | NTTデータ先端技術株式会社
オラクルマスター教科書 Gold DBA Oracle Database AdministrationⅡ
オラクルマスター教科書 Oracle Expert RAC 11g R2編
絵で見てわかるシステム構築のためのOracle設計

■おわりに
従来型リリースモデルはパッチの種類によって提供時期が不定期だったり、種類が多かったり分かりにくい印象でした。
年次リリースモデルはパッチの種類に関係なく提供時期が定期的となり、従来型リリースモデルに比べ種類も少なくなったため、分かりやすくなった印象です。
結果不正などのバグフィックスオプティマイザ修正を伴うパッチを適用した場合、アプリケーション(SQL)の実行計画に影響が出る可能性があるため、アプリケーションの再テストが推奨されています。
なお、RURはRU19.16.0で廃止され、19.17.0以降はMRP(Monthly Recommended Patches)としてパッチ提供するスタイルに変わりました。
※現時点でMRPはLinuxプラットフォームのみ対応しており、他のプラットフォームでRUに含まれていない修正は個別パッチを適用する必要があります。