はじめに
何度か取り上げている AutoUpgrade Patching について、そもそも的な所も含めて解説します。
なお、本記事は Japan Oracle User Group (JPOUG) の Tech Talk Night #14 で発表する際に使用する資料として執筆しました。
通常の記事としては読みづらい・わかりづらい部分もあるかもしれませんが、ご容赦ください
JPOUG TTN#14 についてはこちら↓
AutoUpgrade Patching とは?
一言でいうと、「オラクルDBの アウトオブプレース・パッチング を簡単に実行できる AutoUpgradeの機能、および 当該機能を用いたパッチ適用」のことです。
アウトオブプレース・パッチングとインプレース・パッチング
アウトオブプレース・パッチング はオラクルDBのパッチ適用方式のひとつです。パッチ適用方式にはもうひとつ インプレース・パッチング と呼ばれる方式があります。おそらく多くの現場では インプレース・パッチング が用いられているのではないかと推測しています。
インプレース・パッチング
既存の ORACLE HOME に対してパッチ適用 (opatch apply
, datapatch -verbose
) する方式です。
手順はシンプルながらDB停止が伴います。(opatch apply
だけであれば 20分程度)
また、万が一の際にはopatch rollback
でパッチ適用前に戻すことができますが、その際にもシステム停止が伴います。(opatch rollback
だけであれば 5分程度)
アウトオブプレース・パッチング
既存の ORACLE HOME とは 別の場所にバイナリファイルをインストールし、これに対してパッチ適用 する方式です。
インプレース・パッチングと比較して手順はやや複雑ながら、DB停止が短時間で済みます。(旧 ORACLE HOME ↔ 新 ORACLE HOME の切替時間のみ)
注意点として、ORACLE HOME を 2つ以上用意するため、その分ローカルディスクの空きが必要となります。
それぞれのパッチ適用方式の特徴を表でまとめると下表のようになります。
特徴\パッチ適用方式 | インプレース | アウトオブプレース |
---|---|---|
手順 | シンプル![]() |
やや複雑![]() |
システム停止時間 | 長い (数十分)![]() |
短い (数分)![]() |
必要なディスクの空き | 比較的小さい![]() |
比較的大きい![]() |
アウトオブプレース・パッチング自体は特別新しいパッチ適用方式ではありません。
(2015年ごろの atmarkIT の記事で言及されていました↓)
余談ですが、ニューヨークのオラクルユーザ会の資料で米オラクルのエンジニアが「パッチ適用方式はアウトオブプレース一択だよね」と言質を取られているような写真がありました
↓に掲載のP12
AutoUpgrade
AutoUpgrade (autoupgrade.jar) はオラクルが提供するアップグレード・ユーティリティです。
19c以降の Oracleホームにはデフォルトで含まれている他、RUにもその時の最新の AutoUpgrade が同梱されているようです。(本記事執筆時点の最新バージョンは 25.4.250730)
最新の AutoUpgrade を入手するには AutoUpgrade Tool (ドキュメントID 2485457.1) にアクセスしてDLしましょう。
日本語版ドキュメント:自動アップグレード (AutoUpgrade) ツール (ドキュメントID 2603647.1) もありますが、更新が追い付いていないようなので英語版を参照することをお勧めします。
ドキュメントの更新履歴や添付された Changelog を見るに、2019年ごろに初お目見えしたようです。
2019/10/25 本文書を作成
build.version 190620
52 Bug Fixes since 19.4.0.1.0
(snip)
________________________________________________________________________________
build.version 20190513
build.label RDBMS_PT.AUTOUPGRADE_LINUX.X64_190513.1404
31 Bugs fixed since 19.3 Mos 1
(snip)
Changelog の build.date を四半期ごとに集計してみると下記のようになりました。
四半期に一度は更新されているようです。
AutoUpgrade Patching
AutoUpgrade の 2022/7 のリリース (バージョン22.4.220712) で AutoUpgrade Patching が搭載されました。
(snip)
build.version 22.4.220712
build.date 2022/07/12 11:27:00 -0400
build.hash 161fde38
build.hash_date 2022/07/12 06:09:51 -0400
build.supported_target_versions 12.2,18,19,21
build.type production
26 bug fixes since v22.3 release
Tag: V22.4
Description: This is the release for 22.4 on MOS and 19.18(JAN2023RU)
New features
- AutoUpgrade Patching
AutoUpgrade Patching feature extends the AutoUpgrade upgrade capabilities for
patching process, which enables you to perform out-of-place patching for
multiple databases using a single command. With the latest release of
AutoUpgrade tool the AutoUpgrade Patching procedure can be used to apply
Release Update (RU), Release Update Revision (RUR), and one-off patches
to your databases by using out-of-place patching method. When you patch from
an earlier RU or RUR with AutoUpgrade, the simplicity, reliability, and
recoverability of AutoUpgrade is extended to the patching process. As a result,
patching is easier to perform, and you also obtain simpler recovery path from
any issues that can arise during the patch deployment.
(snip)
AutoUpgrade Patching の特徴
ワンコマンドでアウトオブプレース・パッチングが可能
「アウトオブプレース・パッチングはインプレース・パッチングと比較して手順がやや複雑」と前述しましたが、AutoUpgrade Patching はワンコマンドでアウトオブプレース・パッチングが可能です。下記が実際のコマンドです。
[oracle@59f8353d3910 ~]$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar -patch -config test.cfg -mode deploy
-patch
で AutoUpgrade Patching として稼働します。(指定しない場合は AutoUpgrade として稼働)
-config ファイル名
で、AutoUpgrade (Patching) の挙動を制御する設定ファイルを指定します。(後述)
-mode モード
で動作モードを指定します。モードにはanalyze
, create_home
, download
, fixups
, deploy
, upgrade
, postfixups
があり、deploy
を指定すると事前チェックからパッチ適用まで一気通貫で実行されます。
コマンドラインパラメータ・オプションのマニュアルはこちら↓
設定ファイル (test.cfg) には、ソース・ターゲットの ORACLE HOME やパッチを格納するディレクトリを指定します。
global.global_log_dir=/home/oracle/autoupg_wk/glogdir
global.keystore=/opt/oracle/admin/ORCLCDB/piyo
upg1.sid=ORCLCDB
upg1.source_home=/opt/oracle/product/19c/dbhome_1
upg1.target_home=/opt/oracle/product/19c/dbhome_2
upg1.folder=/home/oracle/autoupg_wk/patches
upg1.download=YES
upg1.restoration=no
設定ファイルのマニュアルはこちら↓
下記のサイトで設定ファイルを簡単に作成することができます。(注:オラクル公式のものではありません)
パッチの自動DLが可能
パッチの入手は、My Oracle Support にアクセスして目的のパッチを探しDL、といのうが一般的かと思います。
AutoUpgrade Patching では、前述の設定ファイル内でdownload
をYES
に設定することでパッチの自動DLが可能です。(要インターネット接続)
[oracle@59f8353d3910 ~]$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar -patch -config test.cfg -load_password
Processing config file ...
Loading AutoUpgrade Patching keystore
Enter wallet password:
AutoUpgrade Patching keystore is loaded
Starting AutoUpgrade Patching Password Loader - Type help for available options
MOS>
MOS> add -user narita.yuichiro@jri.co.jp
Enter your secret/Password:
Re-enter your secret/Password:
MOS> list
MOS Credentials Loaded - Connection Successful
MOS> save
Convert the AutoUpgrade Patching keystore to auto-login [YES|NO] ? no
MOS> exit
AutoUpgrade Patching Password Loader finished - Exiting AutoUpgrade Patching
[oracle@59f8353d3910 ~]$
[oracle@59f8353d3910 ~]$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar -patch -config test.cfg -mode deploy
AutoUpgrade Patching 25.3.250509 launched with default internal options
Processing config file ...
Loading AutoUpgrade Patching keystore
Enter wallet password:
AutoUpgrade Patching keystore is loaded
Connected to MOS - Searching for specified patches
----------------------------------------------------
Downloading files to /home/oracle/autoupg_wk/patches
----------------------------------------------------
DATABASE RELEASE UPDATE 19.27.0.0.0
File: p37642901_190000_Linux-x86-64.zip \ 42%
DL (適用) するパッチは設定ファイル内で指定できます。指定しない場合はその時の最新の DBRU, OPATCH, OJVM, DPBP が DL (適用) されます。
global.global_log_dir=/home/oracle/autoupg_wk/glogdir
global.keystore=/opt/oracle/admin/ORCLCDB/piyo
############################
upg1.sid=ORCLCDB
upg1.source_home=/opt/oracle/product/19c/dbhome_1
upg1.target_home=/opt/oracle/product/19c/dbhome_2
upg1.patch=ru:19.25,36922535,36994814,opatch ★
upg1.folder=/home/oracle/autoupg_wk/patches
upg1.download=YES
upg1.restoration=no
PRECHECKS (事前チェック) で失敗リスクの洗い出し
AutoUpgrade Patching には下記のようなステージ (工程) があります。(設定ファイルの記載次第でスキップされるステージもあります。例えばrestoration=no
だと GRP, DROPGRP はスキップされます)
- GRP
- PREACTIONS
- PRECHECKS
- PREFIXUPS
- EXTRACT
- DBTOOLS
- INSTALL
- ROOH
- OH_PATCHING
- OPTIONS
- ROOTSH
- DB_PATCHING
- POSTCHECKS
- POSTFIXUPS
- UPGRMAN
- POSTACTIONS
- DROPGRP
このうち PRECHECKS (事前チェック) ステージでは、パッチ適用の失敗リスクを洗い出してくれます。
PRECHECKS が完了すると下記のようなレポートが出力されますが、例えば固定表の統計情報収集などがチェックされているのがわかります。
また、後続の PREFIXUPSステージでは、PRECHECKSステージで洗い出された失敗リスクのうちオラクル側で対処可能な項目を対処してくれます。
とはいえ、「勝手に変更加えられるのは困るよ」という方もいらっしゃるかと思います。
そんな時は実行モードをanalyze
にすれば、PRECHECKSステージのみが実行されます。
AutoUpgrade Patching Stages and Workflows
AutoUpgrade Patching supports three different job modes. Each mode runs a different set of stages.
AutoUpgrade Patching supports four different job modes. Each mode runs a different set of stages. In AutoUpgrade Patching operations, there are four job modes, with AutoUpgrade stages that are completed in these modes:
Analyze: In this mode, the PRECHECKS stage is run.
Fixups: In this mode, the PRECHECKS and PREFIXUPS stages are run.
Deploy: In this mode, the following stages are run: GRP, PREACTIONS, PRECHECKS, PREFIXUPS, EXTRACT, DBTOOLS, INSTALL, ROOH (Optional), OH_PATCHING, OPTIONS, ROOTSH (Optional), DB_PATCHING, POSTCHECKS, POSTFIXUPS, UPGRMAN (Optional), POSTACTIONS, and DROPGRP.
create_home: In this mode, the following stages are run: EXTRACT, DBTOOLS, INSTALL, ROOH (Optional), OH_PATCHING, OPTIONS, ROOTSH (Optional).
実際のログを見てみるとかなりの数のチェックが動いているように見えますが、↑のレポートにはそれほど表示されていないため、この辺の関係性は今後検証してみようと考えています。
2025-06-30 16:19:21.531 INFO Running check ★DICTIONARY_STATS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.532 INFO Running check CTX_SHADOW_INDEX [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.532 INFO Running check INVALID_OBJECTS_EXIST [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.533 INFO Running check DICTIONARY_HEALTH [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.533 INFO Running check ★INVALID_ORA_OBJ_INFO [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.531 INFO Running check ★COMPONENT_INFO [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.533 INFO Running check DV_ENABLED [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.533 INFO Running check ARCHIVE_MODE_ON [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.535 INFO Running check MAX_EXTENTS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.535 INFO Running check JVM_MITIGATION_PATCH [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.535 INFO Running check NEW_TIME_ZONES_EXIST [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.535 INFO Running check MIN_RECOVERY_AREA_SIZE [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.535 INFO Running check MIN_ARCHIVE_DEST_SIZE [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.536 INFO Running check OLD_TIME_ZONES_EXIST [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.537 INFO Running check ORACLE_HOME_KEYSTORE [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.537 INFO Running check PENDING_DST_SESSION [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.538 INFO Running check POST_JVM_MITIGAT_PATCH [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:21.538 INFO Running check ★POST_DICTIONARY [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.565 INFO Running check ★PRE_FIXED_OBJECTS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.565 INFO Running check ROLLBACK_SEGMENTS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.566 INFO Running check TABLESPACES [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.566 INFO Running check ★TABLESPACES_INFO [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.567 INFO Running check TEMPTS_ALLOFFLINE [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.576 INFO Running check TEMPTS_NOTEMPFILE [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.576 INFO Running check TS_FORUPG_STATUS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.588 INFO Running check CREATE_WINDOWS_SERVICE [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.588 INFO Running check ★DATAPATCH_TIMEOUT_SETTINGS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.593 INFO Running check DEPLOY_JOB_VALIDATIONS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.594 INFO Running check DISK_SPACE_FOR_RECOVERY_AREA [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.594 INFO Running check FLASH_RECOVERY_AREA_SETUP [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.595 INFO Running check GATEWAY_SID_NAME_CONFLICT [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:22.607 INFO Running check INFORM_DROP_GRP [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.594 INFO Running check ISRAC_SWITCHEDON_TARGETHOME [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.594 INFO Running check MANDATORY_UPGRADE_CHANGES [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.594 INFO Running check NO_KEYSTORE_FILES [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.594 INFO Running check OS_AUTHENTICATION [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.594 INFO Running check ★POST_RECOMPILE_IN_CDB [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.594 INFO Running check ★POST_RECOMPILE [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.597 INFO Running check STANDARD_EDITION [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.597 INFO Running check TARGET_GATEWAY_INSTALLED [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.599 INFO Running check TARGET_HOME_REGISTERED_INVENTORY [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.600 INFO Running check TDE_PASSWORDS_REQUIRED [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.600 INFO Running check UTLRP_RUN_SERIAL [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.600 INFO Running check AP_OPATCH_PREREQ [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.601 INFO Running check AP_DISK_SPACE_FOR_PATCHING [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.602 INFO Running check ★AP_PATCHES_INFORMATION [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.603 INFO Running check SC_BACKUP_JOBS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.614 INFO Running check SC_CENTRAL_INVENTORY [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.621 INFO Running check SC_DATAPUMP_RUNNING [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:23.634 INFO Running check SC_GG_LOGMINER_TRIGGERS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:24.623 INFO Running check SC_GG_INTEGRATED_ER [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:24.628 INFO Running check SC_GUARDIUM [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:24.646 INFO Running check SC_IMPERVA [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:24.661 INFO Running check SC_LOCALE [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:24.668 INFO Running check SC_OPTIM_UPGRADE_PARAM [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:24.680 INFO Running check SC_QI_CHECKS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:24.683 INFO Running check SC_SCHEDULE_JOBS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:25.648 INFO Running check SC_STATS_GATHERING [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:25.656 INFO Running check SC_SYS_PUBLIC_GRANTS [CDB$ROOT] - CheckTrigger.call#109
2025-06-30 16:19:25.696 INFO Running check ★UPDATE_SYS_DIRECTORIES [CDB$ROOT] - CheckTrigger.call#109
おわりに
以上、AutoUpgrade Patching について簡単に解説させていただきました。
RAC構成ではないのでローリングパッチ適用はできないが、パッチ適用によるダウンタイムは短くする必要がある、という方は AutoUpgrade Patching の利用をご検討してみてはいかがでしょうか。
下記の記事でもう少し細かい部分を解説していますので、興味のある方はぜひご覧ください