はじめに
今回も AutoUpgrade Patching についてです (そろそろ PostgreSQL のことも投稿したい )
これまで構成ファイルの patchパラメータは特に指定していなかったので、AutoUpgrade を実行した時点で最新のDBRU, DPBP, OJVMRU が適用されていました。
今回は少し古いDBRUと個別パッチ (Interim Patch) を適用してみます。
また、記事の最後で構成ファイルをGUIで作成する方法をご紹介します。
構成ファイル
DBRUは 19.25 (2024/10リリース)、個別パッチは 36922535, 36994814 を適用する場合、構成ファイルは下記のようになります。(patchパラメータに注目)
DPBP, OJVMRU も適用したい場合にはパッチ番号を調べて記載しましょう。
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
AutoUpgrade 実行
ひとつ前の記事で実行していた簡単な仕掛け (verlog.sh) を今回も実行しながら、AutoUpgrade を実行します。
実際のアプリからの利用イメージに近づけるため、SYSTIMESTAMP とディクショナリ (PRODUCT_COMPONENT_VERSION) の SELECT結果を直接ファイルに追記する貌から、SELECT結果を一旦通常のテーブルに INSERTし、INSERT先のテーブルの SELECT結果をファイルに追記する貌へ変更しました。
#!/bin/bash
# Database connection settings
DB_USER="piyo"
DB_PASS="password"
DB_CONN_STR="//localhost:1521/orclpdb1"
# Log file path
LOG_FILE="/home/oracle/verlog.txt"
while true; do
# Get the current date/time (for error logging)
current_date=$(date '+%Y-%m-%d %H:%M:%S')
# Run SQL*Plus to get DB version info and write to log
sqlplus -L -s "${DB_USER}/${DB_PASS}@${DB_CONN_STR}" <<EOF
WHENEVER SQLERROR EXIT 1
INSERT INTO verlog (sample_time, ver, cnt)
SELECT
SYSTIMESTAMP,
(SELECT version_full FROM product_component_version),
(SELECT COUNT(*) FROM verlog)
FROM dual;
COMMIT;
SET HEADING OFF
SPOOL $LOG_FILE APPEND
SELECT TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI:SS') || ',' || ver || ',' || cnt FROM verlog WHERE cnt=(SELECT MAX(cnt) FROM verlog);
EXIT
EOF
# If SQL*Plus returned an error, log the failure with timestamp
if [ $? -ne 0 ]; then
echo "${current_date},fail" >> "${LOG_FILE}"
fi
# Wait 10 seconds before next check
sleep 10
done
AutoUpgrade は実行して一時間ほどで完了しました。
verlog.sh
の出力ファイルは下記の通りで、前回と同様1分程度でパッチ適用した環境に切り替わっていました。(snipした箇所に fail なし)
(snip)
2025-07-08 11:27:04,19.3.0.0.0,223
2025-07-08 11:27:15,19.3.0.0.0,224
2025-07-08 11:27:26,19.3.0.0.0,225
2025-07-08 11:27:37,19.3.0.0.0,226
2025-07-08 11:27:48,19.3.0.0.0,227
2025-07-08 11:27:59,19.3.0.0.0,228
2025-07-08 11:28:10,19.3.0.0.0,229
2025-07-08 11:28:21,fail
2025-07-08 11:28:31,fail
2025-07-08 11:28:41,fail
2025-07-08 11:28:51,fail
2025-07-08 11:29:01,fail
2025-07-08 11:29:11,fail
2025-07-08 11:29:21,19.25.0.0.0,230
2025-07-08 11:29:32,19.25.0.0.0,231
2025-07-08 11:29:43,19.25.0.0.0,232
2025-07-08 11:29:54,19.25.0.0.0,233
(snip)
ステージごとの Duration を前回と今回で比較すると下表の通りです。
差が顕著 (約17分) な DB_PATCHINGステージの違いを掘り下げていきます。
ステージ | Duration (前回/DBRU, DPBP, OJVMRU) | Duration (今回/DBRU, Interim Patch x2) |
---|---|---|
PRECHECKS | 0:06:27 | 0:04:18 |
PREFIXUPS | 0:09:17 | 0:06:52 |
EXTRACT | 0:03:13 | 0:03:24 |
DBTOOLS | 0:00:07 | 0:00:08 |
INSTALL | 0:01:14 | 0:01:13 |
OH_PATCHING | 0:17:15 | 0:15:51 |
DB_PATCHING | 0:40:51 | 0:23:55 |
POSTCHECKS | 0:00:01 | 0:00:01 |
POSTFIXUPS | 0:00:11 | 0:00:11 |
DB_PATCHINGステージを掘り下げる
前回の記事で触れた通り、DB_PATCHINGステージにはさらにステージが存在します。
前回の記事は↓
DB_PATCHING内の各ステージの内訳を前回と今回で比較すると下表の通りです。
ステージ | Duration (前回/DBRU, DPBP, OJVMRU) | Duration (今回/DBRU, Interim Patch x2) |
---|---|---|
PREUPGRADE | 0:00:00 | 0:00:00 |
PRECHECKS | 0:01:25 | 0:01:26 |
PREFIXUPS | 0:01:31 | 0:01:32 |
DRAIN | 0:00:46 | 0:00:52 |
DBUPGRADE | 0:34:25 | 0:17:11 |
POSTCHECKS | 0:00:00 | 0:00:00 |
POSTFIXUPS | 0:01:50 | 0:02:00 |
POSTUPGRADE | 0:00:00 | 0:00:00 |
SYSUPDATES | 0:00:00 | 0:00:00 |
DB_PATCHINGステージの差 (約17分) はほぼほぼ DBUPGRADEステージの差でした。
DBRUPGRADEステージでは datapatch が実行されています。
コンテナごとの datapatch開始時刻・終了時刻をログから整理すると下表の通りです。
コンテナ | 開始時刻 | 終了時刻 | 所要時間 | |
---|---|---|---|---|
前回 | CDB$ROOT | 17:01:49 | 17:22:04 | 00:20:15 |
PDB$SEED | 17:23:24 | 17:34:48 | 00:11:24 | |
ORCLPDB1 | 17:23:12 | 17:34:31 | 00:11:19 | |
今回 | CDB$ROOT | 11:30:19 | 11:37:56 | 00:07:37 |
PDB$SEED | 11:38:29 | 11:46:13 | 00:07:44 | |
ORCLPDB1 | 11:38:19 | 11:45:52 | 00:07:33 |
今回は CDB$ROOT の datapatch が約13分、PDB の datapatch が約4分早くなっていました。
この差は、適用するパッチによって datapatch の実施要否が異なるためと考えられます。
DBRU以外の各パッチの README を見てみると下表のような違いがあります。
パッチ (DBRU除く) | Postinstllation (datapatch) の実施要否 | |
---|---|---|
前回 | DPBP (37777295) | 要 |
OJVMRU (37499406) | 要 | |
今回 | Interim Patch (36994814) | 否 |
Interim Patch (36922535) | 否 |
前述の通り切り替え時間には影響しないのであまり気にする必要のないポイントではありますが、参考になれば幸いです。
構成ファイルをGUIで作成
構成ファイルをGUIで作成できるサイト (AutoUpgrade Composer) を有志の方が立ち上げています。(同じチームのKさんから教えていただきました、Kさんありがとうございます )
構成ファイルの作成・編集に慣れるまではこのサイトを利用するのも手かと思います。
Oracle Ace の方が立ち上げたもので、オラクル公式のものではありませんので、その点はご注意ください。
Oracle Ace については下記が参考になります。