RUバージョンが異なる ORACLE_HOME の CDB間 で PDB をクローンして、RU を適用してみます。
PDBクローンは リフレッシュ可能なPDB を作成してデータをレプリケーションしてみます。
1. 参考ドキュメント
以下のマニュアルを参照しています。
Oracle Multitenant管理者ガイド 19c
7 PDBまたは非CDBのクローニング
リモートPDBのクローニング
https://docs.oracle.com/cd/F19136_01/multi/cloning-a-pdb.html#GUID-2512C9E9-FD11-4F33-871B-892ED5FC4079リフレッシュ可能なクローンPDBについて
https://docs.oracle.com/cd/F19136_01/multi/cloning-a-pdb.html#GUID-C476B273-469B-4999-8637-A6BA1BD6300A
下記のブログも参照しました。
Minimal Downtime Patching using Refreshable PDB Clones
https://database-heartbeat.com/2021/02/04/minimal-downtime-patching-using-refreshable-pdb-clones/
2. 検証環境
以下の環境で検証しました。
-
クローン元(ソースDB)
BaseDB EEHP(4oCPU)
DB Version: 19.26
CDB名: DB0628
PDB名: AYUPDB19COMEGA -
クローン先(ターゲットDB)
BaseDB EEHP(2oCPU)
DB Version: 19.27
CDB名: AYUDB19C
PDB名: AYUPDB19COMEGA_CLONE
3. テストデータの作成
クローン元の PDB にテストデータを作成しておきます。
-- クローン元PDB で実行
CONNECT AYSHIBAT/xxxxxxxx@xxxxxxxx
-- Create Table
DROP TABLE TEST_TABLE;
CREATE TABLE TEST_TABLE (
C1 NUMBER
,C2 VARCHAR2(100)
,C3 DATE
);
-- Dummy Data
INSERT INTO TEST_TABLE
SELECT LEVEL
, 'TEST' || TO_CHAR(LEVEL)
, TRUNC(SYSDATE, 'DD') + (LEVEL/24/60/60)
FROM DUAL
CONNECT BY LEVEL <= 10000;
-- Commit
COMMIT;
結果を確認します。
SQL> SELECT COUNT(*) FROM TEST_TABLE;
COUNT(*)
----------
10000
4. DBユーザー(CDB の共通ユーザーの作成)
ソースCDB に DBLINK で接続するための共通ユーザー(C##PDBCLONE)を作成しておきます。
-- ソースCDB で実行
sqlplus /nolog
CONNECT /AS SYSDBA
CREATE USER C##PDBCLONE IDENTIFIED BY "xxxxxxxx"
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
GRANT DBA TO C##PDBCLONE CONTAINER=ALL;
GRANT SYSOPER TO C##PDBCLONE CONTAINER=ALL;
5. データベース・リンク(DBLINK)の作成
ターゲット側の CDB でデータベース・リンク(DBLINK)を作成します。
DBLINK の作成前にターゲットCDB から ソースCDB に 4. で作成した共通ユーザーで接続できるか確認します。
-- ターゲットCDB で実行、ソースCDBに接続できるか確認
sqlplus /nolog
CONNECT C##PDBCLONE/xxxxxxxx@'xxxxxxxxxxxxxxxxxxxxx:1521/DB0
SELECT NAME FROM V$DATABASE;
共通ユーザーで接続できた場合は ターゲットCDB に DBLINK を作成して動作確認します。CDB の GLOBAL_NAMESパラメータ は FALSE にセットしておきます。
-- ターゲットCDB で実行
CONNECT /AS SYSDBA
SELECT NAME FROM V$DATABASE;
ALTER SYSTEM SET GLOBAL_NAMES = FALSE SCOPE=BOTH SID='*';
DROP DATABASE LINK DBLINK_TO_DB0628;
CREATE DATABASE LINK DBLINK_TO_DB0628 CONNECT TO C##PDBCLONE IDENTIFIED BY xxxxxxxx USING 'xxxxxxxxxxxxxxxxxxxxx:1521/DB0628.xxxxxxxxxxxx';
SELECT NAME FROM V$DATABASE@DBLINK_TO_DB0628;
DBLINK経由で ソースCDB の DB名 が確認できます。
SQL> SELECT NAME FROM V$DATABASE@DBLINK_TO_DB0628;
NAME
---------
DB0628
6. リフレッシュ可能な PDBクローンを作成
以下のコマンドを ターゲットCDB で実行します。
-- ターゲットCDB で実行
SET TIMING ON;
CREATE PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE FROM AYUPDB19COMEGA@DBLINK_TO_DB0628 KEYSTORE IDENTIFIED BY xxxxxxxx REFRESH MODE EVERY 1 MINUTES PARALLEL 8;
成功すると以下の結果になります。
SQL> CREATE PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE FROM AYUPDB19COMEGA@DBLINK_TO_DB0628 KEYSTORE IDENTIFIED BY xxxxxxxx REFRESH MODE EVERY 1 MINUTES PARALLEL 8;
Pluggable database created.
リフレッシュの状況を確認します。
-- ターゲットCDB で実行
SET LINESIZE 170;
COLUMN PDB_NAME FORMAT A30;
SELECT PDB_NAME, REFRESH_MODE, REFRESH_INTERVAL, LAST_REFRESH_SCN FROM DBA_PDBS;
LAST_REFRESH_SCN がカウントアップされているのが確認できます。
PDB_NAME REFRES REFRESH_INTERVAL LAST_REFRESH_SCN
------------------------------ ------ ---------------- ----------------
AYUPDB19C NONE
PDB$SEED NONE
AYUPDB19COMEGA_CLONE AUTO 1 6323913
SQL> /
PDB_NAME REFRES REFRESH_INTERVAL LAST_REFRESH_SCN
------------------------------ ------ ---------------- ----------------
AYUPDB19C NONE
PDB$SEED NONE
AYUPDB19COMEGA_CLONE AUTO 1 6324478
7. データレプリケーションの確認
データがレプリケーションされているかを確認します。クローン元のPDB にデータを挿入します。
-- クローン元PDB で実行
CONNECT AYSHIBAT/xxxxxxxx@"xxxxxxxxxxxxxxxxxxx"
-- Dummy Data
INSERT INTO TEST_TABLE
SELECT LEVEL
, 'TEST' || TO_CHAR(LEVEL)
, TRUNC(SYSDATE, 'DD') + (LEVEL/24/60/60)
FROM DUAL
CONNECT BY LEVEL <= 1000;
COMMIT;
データをカウントします。
SELECT COUNT(*) FROM TEST_TABLE;
COUNT(*)
----------
11000
ターゲット側でリフレッシュされるの待ちます。
PDB_NAME REFRES REFRESH_INTERVAL LAST_REFRESH_SCN
------------------------------ ------ ---------------- ----------------
AYUPDB19C NONE
PDB$SEED NONE
AYUPDB19COMEGA_CLONE AUTO 1 6324765
SQL> /
PDB_NAME REFRES REFRESH_INTERVAL LAST_REFRESH_SCN
------------------------------ ------ ---------------- ----------------
AYUPDB19C NONE
PDB$SEED NONE
AYUPDB19COMEGA_CLONE AUTO 1 6324821
リフレッシュされたのを確認したらクローン先の PDB を READ ONLY で OPEN してテスト用データを確認します。
-- ターゲットCDB で実行
ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE OPEN READ ONLY;
ALTER SESSION SET CONTAINER = AYUPDB19COMEGA_CLONE;
SELECT COUNT(*) FROM AYSHIBAT.TEST_TABLE;
結果は以下の通りです。PDBオープン時の警告は無視します。
SQL> ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE OPEN READ ONLY;
Warning: PDB altered with errors.
SQL> ALTER SESSION SET CONTAINER = AYUPDB19COMEGA_CLONE;
Session altered.
SQL> SELECT COUNT(*) FROM AYSHIBAT.TEST_TABLE;
COUNT(*)
----------
11000
データがレプリケーションされていることを確認できました。
PDB をクローズしてリフレッシュが再開されることを確認します。
-- ターゲットCDB で実行
ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE CLOSE;
CONNECT /AS SYSDBA
SET LINESIZE 170;
COLUMN PDB_NAME FORMAT A30;
SELECT PDB_NAME, REFRESH_MODE, REFRESH_INTERVAL, LAST_REFRESH_SCN FROM DBA_PDBS;
リフレッシュが再開されました。
PDB_NAME REFRES REFRESH_INTERVAL LAST_REFRESH_SCN
------------------------------ ------ ---------------- ----------------
AYUPDB19C NONE
PDB$SEED NONE
AYUPDB19COMEGA_CLONE AUTO 1 6326193
SQL> /
PDB_NAME REFRES REFRESH_INTERVAL LAST_REFRESH_SCN
------------------------------ ------ ---------------- ----------------
AYUPDB19C NONE
PDB$SEED NONE
AYUPDB19COMEGA_CLONE AUTO 1 6326290
なお PDBリフレッシュ の様子はアラートログからも確認できます。
-- ターゲットCDB のアラートログ
2025-06-28T14:58:20.369614+00:00
AYUPDB19COMEGA_CLONE(7):alter pluggable database refresh
2025-06-28T14:58:23.152644+00:00
Applying media recovery for pdb-4099 from SCN 6325055 to SCN 6325107
Remote log information: count-1
thr-1,seq-16,logfile-/u03/app/oracle/fast_recovery_area/DB0628_67R_NRT/foreign_archivelog/AYUPDB19COMEGA/2025_06_28/o1_mf_1_16_n600rh2m_.arc,los-2837894,nxs-18446744073709551615,maxblks-13426
AYUPDB19COMEGA_CLONE(7):Media Recovery Start
2025-06-28T14:58:23.157403+00:00
AYUPDB19COMEGA_CLONE(7):Serial Media Recovery started
AYUPDB19COMEGA_CLONE(7):max_pdb is 7
2025-06-28T14:58:23.219588+00:00
AYUPDB19COMEGA_CLONE(7):Media Recovery Log /u03/app/oracle/fast_recovery_area/DB0628_67R_NRT/foreign_archivelog/AYUPDB19COMEGA/2025_06_28/o1_mf_1_16_n600rh2m_.arc
2025-06-28T14:58:23.703290+00:00
AYUPDB19COMEGA_CLONE(7):Incomplete Recovery applied until change 6325107 time 06/28/2025 14:58:21
2025-06-28T14:58:23.705488+00:00
AYUPDB19COMEGA_CLONE(7):Media Recovery Complete (AYUDB19C)
AYUPDB19COMEGA_CLONE(7):Completed: alter pluggable database refresh
8. レプリケーションの停止とパッチ適用(datapatch実行)
まずクローン元の PDB をクローズします。
-- ソースCDB で実行
sqlplus /nolog
CONNECT /AS SYSDBA
SHOW PDBS;
ALTER PLUGGABLE DATABASE AYUPDB19COMEGA CLOSE;
SHOW PDBS;
結果は以下の通りです。
SQL> SHOW PDBS;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 AYUPDB19COMEGA READ WRITE NO
SQL> ALTER PLUGGABLE DATABASE AYUPDB19COMEGA CLOSE;
Pluggable database altered.
SQL> SHOW PDBS;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 AYUPDB19COMEGA MOUNTED
SQL>
ターゲット側の PDB で手動リフレッシュ実行/自動リフレッシュ停止/PDBのオープンを実行します。
-- ターゲットCDB で実行
sqlplus /nolog
CONNECT /AS SYSDBA
ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE REFRESH;
ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE REFRESH MODE NONE;
ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE OPEN;
SQL> ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE REFRESH;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE REFRESH MODE NONE;
Pluggable database altered.
SQL> ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE OPEN;
Warning: PDB altered with errors.
SQL> SHOW PDBS;
PDB_PLUG_IN_VIOLATIONSディクショナリを確認して PDB のエラーを確認します。RU の postスクリプトである datapatch を実行して解消します。
-- ターゲットCDB で実行
SET LINESIZE 250;
SET PAGESIZE 100;
COLUMN NAME FORMAT A30;
COLUMN CAUSE FORMAT A30;
COLUMN MESSAGE FORMAT A170;
SELECT NAME, TYPE, CAUSE, MESSAGE FROM PDB_PLUG_IN_VIOLATIONS WHERE NAME='AYUPDB19COMEGA_CLONE';
結果は以下の通りです。
NAME TYPE CAUSE MESSAGE
------------------------------ --------- ------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AYUPDB19COMEGA_CLONE WARNING Parameter CDB parameter processes mismatch: Previous 800 Current 400
AYUPDB19COMEGA_CLONE WARNING Parameter CDB parameter cpu_count mismatch: Previous 8 Current 4
AYUPDB19COMEGA_CLONE WARNING Parameter CDB parameter pga_aggregate_limit mismatch: Previous 14592M Current 7424M
AYUPDB19COMEGA_CLONE WARNING Parameter CDB parameter wallet_root mismatch: Previous '/opt/oracle/dcs/commonstore/wallets/DB0628_67r_nrt' Current '/opt/oracle/dcs/commonstore/wallets/AYUDB19C_rrx_nrt'
AYUPDB19COMEGA_CLONE WARNING Parameter CDB parameter global_names mismatch: Previous TRUE Current FALSE
AYUPDB19COMEGA_CLONE WARNING Parameter CDB parameter pga_aggregate_target mismatch: Previous 7296M Current 3712M
AYUPDB19COMEGA_CLONE WARNING Oracle Opatch Oracle opatch mismatch: opatch 34697081 is missing in the CDB.
AYUPDB19COMEGA_CLONE WARNING Oracle Opatch Oracle opatch mismatch: opatch 37213431 is missing in the CDB.
AYUPDB19COMEGA_CLONE WARNING Oracle Opatch Oracle opatch mismatch: opatch 37102264 is missing in the CDB.
AYUPDB19COMEGA_CLONE WARNING Oracle Opatch Oracle opatch mismatch: opatch 37497089 is missing in the CDB.
AYUPDB19COMEGA_CLONE WARNING Oracle Opatch Oracle opatch mismatch: opatch 37260974 is missing in the CDB.
AYUPDB19COMEGA_CLONE ERROR SQL Patch Interim patch 37499406/26115603 (OJVM RELEASE UPDATE: 19.27.0.0.250415 (37499406)): Installed in the CDB but not in the PDB
AYUPDB19COMEGA_CLONE ERROR SQL Patch Interim patch 37102264/25987410 (OJVM RELEASE UPDATE: 19.26.0.0.250121 (37102264)): Not installed in the CDB but installed in the PDB
AYUPDB19COMEGA_CLONE ERROR SQL Patch '19.27.0.0.0 Release_Update 2504061311' is installed in the CDB but '19.26.0.0.0 Release_Update 2501181248' is installed in the PDB
アラートログには以下のようなメッセージも出力されています。
-- ターゲットCDB のアラートログ
AYUPDB19COMEGA_CLONE(7):***************************************************************
AYUPDB19COMEGA_CLONE(7):WARNING: Pluggable Database AYUPDB19COMEGA_CLONE with pdb id - 7 is
AYUPDB19COMEGA_CLONE(7): altered with errors or warnings. Please look into
AYUPDB19COMEGA_CLONE(7): PDB_PLUG_IN_VIOLATIONS view for more details.
AYUPDB19COMEGA_CLONE(7):***************************************************************
AYUPDB19COMEGA_CLONE(7) Error Violation: SQL Patch, Cause: '19.27.0.0.0 Release_Update 2504061311' is installed in the CDB but '19.26.0.0.0 Release_Update 2501181248' is installed in the PDB, Action: Call datapatch to install in the PDB or the CDB
AYUPDB19COMEGA_CLONE(7) Error Violation: SQL Patch, Cause: Interim patch 37499406/26115603 (OJVM RELEASE UPDATE: 19.27.0.0.250415 (37499406)): Installed in the CDB but not in the PDB, Action: Call datapatch to install in the PDB or the CDB
AYUPDB19COMEGA_CLONE(7) Error Violation: SQL Patch, Cause: Interim patch 37102264/25987410 (OJVM RELEASE UPDATE: 19.26.0.0.250121 (37102264)): Not installed in the CDB but installed in the PDB, Action: Call datapatch to install in the PDB or the CDB
AYUPDB19COMEGA_CLONE(7):SUPLOG: Set PDB SUPLOG SGA at PDB OPEN, old 0x18, new 0x0 (no suplog)
datapatch の実行前に PDB のパッケージ類をリコンパイルします。
-- ターゲットCDB で実行
ALTER SESSION SET CONTAINER = AYUPDB19COMEGA_CLONE;
@?/rdbms/admin/utlrp.sql
リコンパイルの結果は以下の通りです。
DOC> The following PL/SQL block invokes UTL_RECOMP to recompile invalid
DOC> objects in the database. Recompilation time is proportional to the
:
:
PL/SQL procedure successfully completed.
datapatch を実行します。
# ターゲットCDB の OS の oracleユーザーで実行
$ORACLE_HOME/OPatch/datapatch -verbose -pdbs AYUPDB19COMEGA_CLONE
datapatch の実行結果は以下の通りです。
[oracle@ayubasedb19c ~]$ $ORACLE_HOME/OPatch/datapatch -verbose -pdbs AYUPDB19COMEGA_CLONE
SQL Patching tool version 19.27.0.0.0 Production on Sat Jun 28 15:38:07 2025
Copyright (c) 2012, 2025, Oracle. All rights reserved.
Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_79580_2025_06_28_15_38_07/sqlpatch_invocation.log
Connecting to database...OK
Gathering database info...done
Note: Datapatch will only apply or rollback SQL fixes for PDBs
that are in an open state, no patches will be applied to closed PDBs.
Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation
(Doc ID 1585822.1)
Bootstrapping registry and package to current versions...done
Determining current state...done
Current state of interim SQL patches:
Interim patch 37102264 (OJVM RELEASE UPDATE: 19.26.0.0.250121 (37102264)):
Binary registry: Not installed
PDB AYUPDB19COMEGA_CLONE: Applied successfully on 21-JAN-25 09.46.08.874811 AM
Interim patch 37499406 (OJVM RELEASE UPDATE: 19.27.0.0.250415 (37499406)):
Binary registry: Installed
PDB AYUPDB19COMEGA_CLONE: Not installed
Current state of release update SQL patches:
Binary registry:
19.27.0.0.0 Release_Update 250406131139: Installed
PDB AYUPDB19COMEGA_CLONE:
Applied 19.26.0.0.0 Release_Update 250118124854 successfully on 21-JAN-25 09.52.01.453165 AM
Adding patches to installation queue and performing prereq checks...done
Installation queue:
For the following PDBs: AYUPDB19COMEGA_CLONE
The following interim patches will be rolled back:
37102264 (OJVM RELEASE UPDATE: 19.26.0.0.250121 (37102264))
Patch 37642901 (Database Release Update : 19.27.0.0.250415 (37642901)):
Apply from 19.26.0.0.0 Release_Update 250118124854 to 19.27.0.0.0 Release_Update 250406131139
The following interim patches will be applied:
37499406 (OJVM RELEASE UPDATE: 19.27.0.0.250415 (37499406))
WARNING: Following components are NOT in a valid state.
This could cause patching failure. If it does, consider
running utlrp.sql to bring components to VALID state.
Then, re-run datapatch.
AYUPDB19COMEGA_CLONE : JAVAVM [INVALID]
Installing patches...
Patch installation complete. Total patches installed: 3
Validating logfiles...done
Patch 37102264 rollback (pdb AYUPDB19COMEGA_CLONE): SUCCESS
logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/37102264/25987410/37102264_rollback_AYUDB19C_AYUPDB19COMEGA_CLONE_2025Jun28_15_39_02.log (no errors)
Patch 37642901 apply (pdb AYUPDB19COMEGA_CLONE): SUCCESS
logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/37642901/27123174/37642901_apply_AYUDB19C_AYUPDB19COMEGA_CLONE_2025Jun28_15_39_19.log (no errors)
Patch 37499406 apply (pdb AYUPDB19COMEGA_CLONE): SUCCESS
logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/37499406/26115603/37499406_apply_AYUDB19C_AYUPDB19COMEGA_CLONE_2025Jun28_15_39_11.log (no errors)
SQL Patching tool complete on Sat Jun 28 15:40:47 2025
JAVAVM の警告が出てますね……。指示通り utlrp.sql を実行して JAVAVM が有効化されているか DBA_REGISTRY を確認します。
-- ターゲットCDB で実行
ALTER SESSION SET CONTAINER = AYUPDB19COMEGA_CLONE;
@?/rdbms/admin/utlrp.sql
COLUMN COMP_NAME FORMAT A60;
SELECT COMP_NAME, VERSION, STATUS FROM DBA_REGISTRY ORDER BY COMP_NAME;
DBA_REGSTRY では VALID になっていました。
COMP_NAME VERSION STATUS
------------------------------------------------------------ ------------------------------ --------------------------------------------
JServer JAVA Virtual Machine 19.0.0.0.0 VALID
:
PDB を クローズ → 再オープンします。
-- ターゲットCDB で実行
ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE CLOSE;
ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE OPEN;
PDBオープン時の警告は出なくなりました。
15:57:34 SQL> ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE CLOSE;
Pluggable database altered.
15:57:49 SQL> ALTER PLUGGABLE DATABASE AYUPDB19COMEGA_CLONE OPEN;
Pluggable database altered.
最後に TDE の暗号化鍵を更新しておきます。
-- ターゲットCDB で実行
ALTER SESSION SET CONTAINER = AYUPDB19COMEGA_CLONE;
ADMINISTER KEY MANAGEMENT SET KEY USING TAG 'NEW_KEY' FORCE KEYSTORE IDENTIFIED BY xxxxxxxx WITH BACKUP;
keystore altered.
9. まとめ
リフレッシュ可能なPDBクローンでデータをレプリケーションした後に集積パッチ(RU)を適用できることを確認できました。PDB(※シングル・テナントを含む)を利用している環境では便利なのでは。上手く活用してくださいね。
彡(^)(^)