Oracle Databaseのパッチ適用

 


✅ Oracle Databaseのパッチ適用について


🔧 パッチとは?

Oracleでは、機能強化・セキュリティ向上・バグ修正のために、**定期的にパッチ(patch)**が提供されます。


🛠 パッチ適用の標準手順(10ステップ)

Oracleパッチ適用の流れは、どの環境でも基本的に共通です。以下の10ステップで構成されます:


✅ 1. パッチ適用の通知

  • セキュリティチームや監査チームが「新しいパッチが出た」と通知。

  • 本番環境にパッチを適用するように依頼(チケット発行)。


✅ 2. パッチのダウンロード

  • Oracleの公式サポートサイト「My Oracle Support」から必要なパッチをダウンロード


✅ 3. フルバックアップの取得

  • データベース全体とOracle Home(Oracleソフトウェア)ファイルのバックアップを作成。

  • トラブル時に復元できるよう準備。


✅ 4. 対象環境(ターゲット)の確認

  • 単一インスタンス、RAC構成、スタンバイDB、クラウド環境などを確認・分類

  • それぞれでパッチ方法が異なるため、対象を明確にしておく。


✅ 5. テスト環境での先行適用

  • 絶対に本番環境にいきなり適用しない!

  • まずテスト環境でパッチを適用し、動作確認を行う。


✅ 6. テスト後の問題対応

  • テスト中に問題があった場合、My Oracle Support にサービスリクエスト(SR)を提出

  • Oracleエンジニアと連携して解決。


✅ 7. アプリケーション動作の確認

  • パッチによってアプリの動作に影響が出ることがあるため、アプリの動作確認を実施

  • QA(品質保証)部門がある場合は、テストDBでの確認を依頼。


✅ 8. パッチ手順書の作成

  • 実際にパッチを適用した操作手順を詳細に記録し、本番適用用の手順書を準備。


✅ 9. メンテナンスウィンドウの調整

  • 顧客や関係者と相談して、適用タイミング(メンテナンス時間)を調整


✅ 10. 本番環境へのパッチ適用

  • 問題がなければ、本番環境にパッチを適用


💡補足ポイント

  • テスト環境での先行適用は、トラブル防止に非常に重要

  • Oracleサポートを活用しながら、安全かつ確実な運用を。

  • アプリや自動化のテストまで考慮することが理想。


✅ Oracle Homeとパッチバージョンの確認


🎯 概要

このビデオでは、Oracleの現在のOracle Homeディレクトリデータベースのバージョン、および適用済みパッチの確認方法を学びます。


🔧 Apacheユーティリティとは?

  • Oracleが提供するパッチ管理ツール(Apache utility)です。

  • Oracle Grid Infrastructure や Real Application Cluster(RAC)、単一インスタンスのOracle Homeに対して、分析・トラブルシューティング・パッチ適用を柔軟に実施可能

  • Oracle Home ディレクトリ内に存在します。


🛠 主なコマンド

コマンド説明
patch list patchesインストール済みパッチの一覧を表示
patch help使用できるオプション一覧を表示
patch versionApacheユーティリティ自体のバージョンを表示

🧩 SQLパッチの確認

  • SQLパッチ(SQLスクリプトを含むパッチ)の適用状況を確認するには、次のビューを使用します:
    DBA_REGISTRY_SQLPATCH

  • このビューには、各パッチの適用/ロールバック履歴が記録されています。

  • 例:Patch ID 29517242 は、2021年8月16日にRoot Containerに対して適用済み。


🧪 PDB(Pluggable Database)での確認

  • PDBに切り替えた後、同じSQL文でそのPDBに対するパッチの状態を確認可能。


❗️無効なオブジェクト(Invalid Objects)の確認

  • パッチ適用前には、無効なオブジェクトを修正しておく必要があります

  • 次のSQLで確認:

    sql
    SELECT owner, object_name, object_type, status FROM dba_objects WHERE status = 'INVALID';
  • 本例では、CDBおよびPDBに無効なオブジェクトは存在しないため、パッチ処理を安全に進められる状態。

🎯 Oracleサポートサイトからのパッチ取得と手動インストール

  • Oracle製品のパッチ情報の唯一の正確な情報源は、**OracleサポートWebサイト(My Oracle Support / MOS)**です。

  • My Oracle Support アカウントを持っていない場合は、https://support.oracle.com にアクセスし、「Register」リンクから登録を行います。

  • MOSには多くの機能がありますが、今回の焦点は**「Patches & Updates」タブ**です。


🔍 パッチの検索

  • Product or Family(製品名やカテゴリ)」で検索可能。

  • 例:Oracle Database 19.0 の最新リリースアップデートは 19.12.0

  • 該当のパッチ名リンク(例:32904851)をクリックすると、ダウンロードページへ移動し、**パッチファイルとREADME(手順書)**を取得できます。


⚠ インストール時の注意点

  • パッチをインストールする際は、必ずREADMEファイルの指示に従うこと

  • 手動でパッチを適用する例を紹介しますが、パッチごとに手順が異なるため、毎回READMEの確認が必要です。


🔧 OPatchユーティリティのバージョン確認と更新

  • READMEには、必要なOPatchバージョンが記載されています。

    • 例:パッチ32904851では、OPatch 12.2.0.1.25以上が必要。

    • 現在の環境には、12.2.0.1.17しか入っていないため、アップデートが必要です。


⬇ パッチのダウンロード方法(No Name or Bug No タブを使用)

  1. パッチ番号を「No Name / Bug No」タブに入力。

  2. 検索ボタンをクリック。

  3. OSに適したバージョンを選択して、ZIPファイルとREADMEをダウンロード


💻 ダウンロード後の準備

  • パッチファイルはサーバへコピーします。

  • WindowsからLinuxサーバなどへファイルを転送するには、コマンドプロンプトやSCP、WinSCPなどのツールを使用します。

Oracle パッチ適用の前提作業
ステップ内容
1️⃣ ディレクトリ作成Oracle ユーザーのホームフォルダに soft ディレクトリを作成
2️⃣ ファイル移動ダウンロードしたパッチソフトを soft に移動
3️⃣ 権限設定Oracle ユーザーに対してフォルダ権限を付与
4️⃣ 現在のバージョン確認OPatch 12.2.0.1.17 がインストールされている
5️⃣ 必要バージョンパッチ適用には 12.2.0.1.25 以上が必要
6️⃣ バックアップ旧バージョンのOPatchを移動して退避(バックアップ)
7️⃣ 新バージョンインストールOracle Home に ZIP ファイルをコピーし、直下に展開する

データベース全体のバックアップを作成
ステップ内容
1️⃣ ツール準備前回でパッチツール(OPatch)を更新済み
2️⃣ DBバックアップパッチ前に完全なDBバックアップを取得(必須)
3️⃣ Oracle Home バックアップtar コマンドで Oracle Home をバックアップ(推奨)
4️⃣ リスナー停止コールドバックアップのためにプロセス停止(任意)
5️⃣ ディスク容量問題ラボ環境では容量不足のため Oracle Home のバックアップはスキップ
6️⃣ 教訓Oracle Home にバックアップを置くのは避けるべき
7️⃣ パッチ準備パッチファイルを unzip して準備完了

パッチ適用


ステップ内容
📁 パッチ解凍ダウンロード→解凍→環境変数設定(ORACLE_HOME, PATH
🛠 パッチ適用opatch apply 実行し、Patch ID 32904851 適用
🚀 DB起動DB・リスナー再起動、PDB は開ける状態にする
🧩 後処理(datapatch)datapatch で SQLスクリプト適用(PDBが OPEN 状態である必要)
⚠ エラー対処メモリ不足で失敗 → メモリ増加で解決(重要な検証)
🔄 個別適用--pdbs オプションで PDB ごとに datapatch 実行
🔁 CDB再起動PDBが制限モードになるため CDB再起動で解消
✅ 状態確認registry$patch, dba_registry_sqlpatch, dba_objects 等で確認
🔧 再コンパイル無効オブジェクトがあれば utlrp.sql 実行
⬅ パッチの戻しopatch rollback + datapatch でロールバック可(今回は行わず)

前の記事(Oracle Databaseのバックアップとリカバリー)