6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

リフレッシュ可能なPDBクローンでデータをレプリケーションした後に集積パッチ(RU)を適用してみる(Oracle Database, Oracle Cloud Infrastructure)

6
Last updated at Posted at 2025-06-28

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(※シングル・テナントを含む)を利用している環境では便利なのでは。上手く活用してくださいね。
彡(^)(^)

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?