はじめに
Oracle Database は21cからCDB(コンテナタイプ)のアーキテクチャのみを提供する事となりました。このアーキテクチャにおいて向上しているものにクローンを代表する高い可搬性が挙げられます。マニュアルには、クローンの前提条件の1つとして「同じリリース」である事が記載されている反面、アップグレードのマニュアルには「リプレイ・アップグレードを使用したCDBまたはPDBのアップグレード」にもあるとおり、以前のリリースのPDBを新しいリリースのCDBに接続するアップグレードの方式が記載されています。
今回はRUが異なるケースでPDBクローンを実施してみます。
環境について
今回の環境はOracle Database 19c Version 19.3 および19.26で実施しています。
実装の手順および実行
A) PDB 19.3環境構築 - ORCL1903 : PDB1903A (クローン元PDB)
PDB 19.3環境構築と確認 (クローン元ノード Node1で)
SELECT patch_id, patch_type, action, description FROM dba_registry_sqlpatch;
PATCH_ID PATCH_TYPE ACTION DESCRIPTION
-------- ---------- --------------- ----------------------------------------------------
29517242 RU APPLY Database Release Update : 19.3.0.0.190416 (29517242)
SQL>show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1903A READ WRITE NO
B) CDB 19.26 (クローン先 CDB) 環境構築と確認
CDB 19.26環境構築と確認 (クローン先ノード Node2で)
SELECT patch_id, patch_type, action, description FROM dba_registry_sqlpatch;
PATCH_ID PATCH_TYPE ACTION DESCRIPTION
-------- ---------- --------------- ----------------------------------------------------
29517242 RU APPLY Database Release Update : 19.26.0.0.250121 (37260974)
SQL>show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
-------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
C) ユーザとDatabase Link 作成
- Node1に Create Pluggable Database 権限を持つユーザ PDBSYSを作成
create user PDBSYS default tablespace "USERS" TEMPORARY TABLESPACE "TEMP";
grant connect,resource to PDBSYS;
grant create pluggable database to PDBSYS;
alter user PDBSYS identified by oracle;
- Node2 に Node1(クローン元PDB)への接続が可能な Database Link (DL1903)を作成
CREATE DATABASE LINK DL1903A
CONNECT TO PDBSYS IDENTIFIED BY oracle
USING 'PDB1903A';
※ ここでの"PDB1903A"はtnsnames.oraに設定された接続文字列を示す
D) クローンの作成とステータス(violations)を確認
datafile directoryの確認
/u01/app/oracle/oradata/ORCL1903/pdb1903a/ ⇦ クローン元のデータファイル位置
/u01/app/oracle/oradata/ORCL19C/datafile/PDB1903A を作成する
CREATE PLUGGABLE DATABASE "pdb1903a" FROM "pdb1903a"@"DL1903A"
STORAGE UNLIMITED TEMPFILE REUSE
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/ORCL1903/pdb1903a/','/u01/app/oracle/oradata/ORCL19C/datafile/PDB1903A/');
プラガブル・データベースが作成されました。
経過: 00:00:08.27
SQL>show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1903A MOUNTED
SQL> alter pluggable database PDB1903A open;
警告: PDBが変更されましたが、エラーがあります。
経過: 00:00:05.85
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1903A READ WRITE YES
select* from PDB_PLUG_IN_VIOLATIONS where type = 'ERROR';
---
5-04-04 08:44:10.265131
PDB1903A
SQL Patch ERROR 0 1
'19.26.0.0.0 Release_Update 2501181248' is installed in the CDB but '19.3.0.0.0 Release_Update 1904101227' is installed in the P
DB
PENDING
Call datapatch to install in the PDB or the CDB
datapatch の適用を指摘されている
E) datapatch の適用工程へ
- datapatch の詳細なチェックを実施する
[oracle@node2 OPatch]$ ./datapatch -sanity_checks
Wide character in print at /u01/app/oracle/product/19.0.0/dbhome_1/sqlpatch/sqlpatch_sanity_checks.pm line 473.
SQL Patching sanity checks version 19.26.0.0.0 on 2025年04月04日 08時56分50秒
Wide character in print at /u01/app/oracle/product/19.0.0/dbhome_1/sqlpatch/sqlpatch_sanity_checks.pm line 482.
Wide character in print at /u01/app/oracle/product/19.0.0/dbhome_1/sqlpatch/sqlpatch_sanity_checks.pm line 490.
Copyright (c) 2021, 2025, Oracle. All rights reserved.
... 一部割愛
Check: PDB Violations - WARNING
Before patching, there should not be any unresolved PDB plugin violations.
The listed PDB plugin violations were found
Fix the reported PDB plugin violations, for known scenarios refer to MOS Note 2288129.1.
...
PDB1903A:
| CAUSE | MESSAGE | NAME | STATUS | TYPE |
|-----------+------------------------------------------------------------------------------------------------------------------------------------+----------+---------+-------|
| SQL Patch | '19.26.0.0.0 Release_Update 2501181248' is installed in the CDB but '19.3.0.0.0 Release_Update 1904101227' is installed in the PDB | PDB1903A | PENDING | ERROR |
|-----------+------------------------------------------------------------------------------------------------------------------------------------+----------+---------+-------|
Check: Invalid System Objects - WARNING
There should be no INVALID objects in Oracle-maintained schemas before patching.
The following number of objects are INVALID (per container).
Run '?/rdbms/admin/utlrp.sql' (per container) to try recompiling invalid objects.
PDB1903A:
| OBJECT_COUNT |
|--------------|
| 98 |
|--------------|
Check: Tablespace Status - OK
Check: Backup jobs - OK
Check: Temp file exists - OK
Check: Temp file online - OK
Check: Data Pump running - OK
Check: Container status - OK
...
SQL Patching sanity checks completed on 2025年04月04日 08時57分31秒
Wide character in print at /u01/app/oracle/product/19.0.0/dbhome_1/sqlpatch/sqlpatch_sanity_checks.pm line 482.
Wide character in print at /u01/app/oracle/product/19.0.0/dbhome_1/sqlpatch/sqlpatch_sanity_checks.pm line 490.
- datapatch の適用実施
SQL> alter pluggable database PDB1903A close immediate;
??: 00:00:00.58
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1903A MOUNTED
SQL> alter pluggable database PDB1903A open upgrade;
??: 00:00:00.80
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1903A MIGRATE YES
[oracle@node2 OPatch]$ ./datapatch -pdbs PDB1903A -verbose
直ぐに適用が完了するので確認する
[oracle@ptvm19 OPatch]$ opatch lspatches
37260974;Database Release Update : 19.26.0.0.250121 (37260974)
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)
OPatch succeeded
datapatch の適用されたPDBを通常どおり起動する
SQL> alter pluggable database PDB1903A close immediate;
SQL> alter pluggable database PDB1903A open upgrade;
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY YES
3 PDB1903A READ WRITE NO
<参考資料>
Pluggable Databases Opened in Restricted Mode After PSU Patching (Doc ID 2225006.1)
Datapatch slow/stuck at "Gathering database info" and "Installing Patches" without returning OS prompt / Status (Doc ID 2978448.1)
Datapatch 実行後に PDB プラグインまたはクローン DB が PDB_PLUG_IN_VIOLATION で違反を返す (Doc ID 1931071.1)
マルチテナントでの Unplug/Plug のベストプラクティス (Doc ID 1943745.1)
最後に
CDB構成になり、PDBの統合・集約が進むとPDB単位での運用において、今までと違った操作や監視・管理が必要になるケースがあります。今回のようなケースもその1つかも知れません。最新のRUで稼働しているCDBに統合・集約される、少し世代が古いPDBを移行するケースです。21cからはOpenと同時に自動でアップグレードされる設定がデフォルトになりましたが、VIOLATION のチェックなどについては参考になると思われます。