はじめに
Oracle Database における CDB構成も浸透し、プラガブル・データベース(以下、PDB)とその可搬性についても認知度が向上していると感じます。とは言え、非CDB構成ではない従来の構成で運用中のデータベースも少なくないのではないでしょうか。
12cR1(12.1.0.2)以降では、非CDB構成のデータベースであってもソースとしてクローンし、PDB化する事が可能です。今回は特に、非CDBをクローン元としたリフレッシュ可能なクローンPDB構成を実装してみます。
環境について
今回の環境はOracle Database 19c Version 19.26.0.0.0 で実施しています。
PDBクローンの前提条件を確認します。
19cのマニュアルから読み取れる一般的な条件として以下が挙げられています。
- endiannessが同じ
- 双方のデータベース・オプションは同じか、サブセットである
- 12cリリース1 (12.1.0.2)以上が実行されている
- 同じOracle Databaseリリースが実行されている
- 新しく作成したPDBのデータ・ブロック・サイズはCDBと一致している
- クローン元を読取り/書込みでオープン場合、ARCHIVELOGモード運用
実装の手順および実行
- Single Instance (クローン元)環境確認 : source_node
- Single Instance (クローン先)環境確認 : target_node
- Clone先からのDatabase Linkの作成
- リフレッシュ可能クローンPDBの作成と確認
1. Single Instance (クローン元)環境確認 : source_node
SQL> SELECT CDB FROM V$DATABASE;
CDB
---
NO
非CDB(non-CDB)構成である事が確認できます。次にArchive logモードの確認をします。
SQL> archive log list
データベース・ログ・モード アーカイブ・モード
自動アーカイブ 有効
アーカイブ先 USE_DB_RECOVERY_FILE_DEST
最も古いオンライン・ログ順序 12
アーカイブする次のログ順序 14
現行のログ順序 14
2. Single Instance (クローン先)環境確認 : target_node
QL:orcl19c:SYS@CDB$ROOT> SELECT CDB FROM V$DATABASE;
CDB
---
YES
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO (※)
※ dbca実行時に作成したPDBです。
3. Clone先からのDatabase Linkの作成
クローン元non-CDBにユーザ(PDBSYS)を作成し、CREATE PLUGGABLE DATABASE 権限を付与。
(今回は connect および resource ロールも付与済み)
ターゲットCDBからソースnon-CDBへの database link DL2 作成も作成
まずは、tnsnames.ora への ソースDBサービスの追記
ORCL19NC =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = source_node)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl19nc)
)
)
データベース・リンクの作成
CREATE DATABASE LINK DL2 CONNECT TO PDBSYS IDENTIFIED BY <パスワード>
USING 'ORCL19NC';
作成完了(SQL Developer による確認)

ソース非CDB (orcl19nc) はOMF設定であることも確認
SQL> select name from v$datafile;
NAME
----------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL19NC/datafile/o1_mf_system_mwfwz2wy_.dbf
/u01/app/oracle/oradata/ORCL19NC/datafile/o1_mf_sysaux_mwfx062s_.dbf
/u01/app/oracle/oradata/ORCL19NC/datafile/o1_mf_undotbs1_mwfx0z71_.dbf
/u01/app/oracle/oradata/ORCL19NC/datafile/o1_mf_users_mwfx10bh_.dbf
4. リフレッシュ可能クローンPDBの作成と確認
<作成>
CREATE PLUGGABLE DATABASE "PDB1926" FROM "ORCL19NC"@"dl2"
STORAGE UNLIMITED TEMPFILE REUSE
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/ORCL19NC/datafile/','/u01/app/oracle/oradata/ORCL19C2/datafile')
REFRESH MODE MANUAL;
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB MOUNTED
5 PDB1926 MOUNTED 👈
作成完了(SQL Developer による確認)
<確認>
- Source_node (orcl19ncインスタンス)でスキーマおよびオブジェクトを作成
Create user scott IDENTIFIED BY tiger;
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO scott IDENTIFIED BY tiger;
ALTER USER scott DEFAULT TABLESPACE USERS;
ALTER USER scott TEMPORARY TABLESPACE TEMP;
conn scott/tiger@source_node/pdb1926
DROP TABLE DEPT;
CREATE TABLE DEPT
(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14) ,
LOC VARCHAR2(13) ) ;
DROP TABLE EMP;
CREATE TABLE EMP
(EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
INSERT INTO DEPT VALUES
(10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES
(30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES
(40,'OPERATIONS','BOSTON');
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-6-1987','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-6-1987','dd-mm-yyyy'),1100,NULL,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
DROP TABLE BONUS;
CREATE TABLE BONUS
(
ENAME VARCHAR2(10) ,
JOB VARCHAR2(9) ,
SAL NUMBER,
COMM NUMBER
) ;
DROP TABLE SALGRADE;
CREATE TABLE SALGRADE
( GRADE NUMBER,
LOSAL NUMBER,
HISAL NUMBER );
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
COMMIT;
SQL> select * from scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80-12-17 800 20
7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30
7521 WARD SALESMAN 7698 81-02-22 1250 500 30
7566 JONES MANAGER 7839 81-04-02 2975 20
7654 MARTIN SALESMAN 7698 81-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 81-05-01 2850 30
7782 CLARK MANAGER 7839 81-06-09 2450 10
7788 SCOTT ANALYST 7566 87-06-13 3000 20
7839 KING PRESIDENT 81-11-17 5000 10
7844 TURNER SALESMAN 7698 81-09-08 1500 0 30
7876 ADAMS CLERK 7788 87-06-13 1100 20
7900 JAMES CLERK 7698 81-12-03 950 30
7902 FORD ANALYST 7566 81-12-03 3000 20
7934 MILLER CLERK 7782 82-01-23 1300 10
- target_node (orcl19cインスタンス)でPDBをリフレッシュ
target_node : pdb1926 をリフレッシュして確認
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB MOUNTED
5 PDB1926 MOUNTED 👈
SQL> alter pluggable database pdb1926 refresh;
プラガブル・データベースが変更されました。
SQL> alter pluggable database PDB1926 open read only;
プラガブル・データベースが変更されました。
SQL> conn scott/tiger@target_node/pdb1926
接続されました。
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80-12-17 800 20
7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30
7521 WARD SALESMAN 7698 81-02-22 1250 500 30
7566 JONES MANAGER 7839 81-04-02 2975 20
7654 MARTIN SALESMAN 7698 81-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 81-05-01 2850 30
7782 CLARK MANAGER 7839 81-06-09 2450 10
7788 SCOTT ANALYST 7566 87-06-13 3000 20
7839 KING PRESIDENT 81-11-17 5000 10
7844 TURNER SALESMAN 7698 81-09-08 1500 0 30
7876 ADAMS CLERK 7788 87-06-13 1100 20
7900 JAMES CLERK 7698 81-12-03 950 30
7902 FORD ANALYST 7566 81-12-03 3000 20
7934 MILLER CLERK 7782 82-01-23 1300 10
- アラートログの内容も確認
2025-03-06T05:01:00.129632-05:00
alter pluggable database pdb1926 refresh
2025-03-06T05:01:04.686945-05:00
Applying media recovery for pdb-0 from SCN 3622431 to SCN 3798457
Remote log information: count-3
thr-1,seq-12,logfile-/u01/app/oracle/fast_recovery_area/ORCL19NC/archivelog/2025_03_05/o1_mf_1_12_mwht3kf7_.arc,los-3657086,nxs-3718676,maxblks-344431
thr-1,seq-11,logfile-/u01/app/oracle/fast_recovery_area/ORCL19NC/archivelog/2025_03_04/o1_mf_1_11_mwhd1tt5_.arc,los-2200703,nxs-3657086,maxblks-363722
thr-1,seq-13,logfile-/u01/app/oracle/fast_recovery_area/ORCL19NC/foreign_archivelog/orcl19nc/2025_03_06/o1_mf_1_13_mwlwlz58_.arc,los-3718676,nxs-18446744073709551615,maxblks-329761
PDB1926(5):Media Recovery Start 👈
2025-03-06T05:01:04.690630-05:00
PDB1926(5):Serial Media Recovery started
PDB1926(5):max_pdb is 7
2025-03-06T05:01:04.743611-05:00
PDB1926(5):Media Recovery Log /u01/app/oracle/fast_recovery_area/ORCL19NC/archivelog/2025_03_04/o1_mf_1_11_mwhd1tt5_.arc
PDB1926(5):Resize operation completed for file# 22, fname /u01/app/oracle/oradata/ORCL19C/datafileo1_mf_sysaux_mwfx062s_.dbf, old size 942080K, new size 952320K
2025-03-06T05:01:06.503541-05:00
PDB1926(5):Resize operation completed for file# 22, fname /u01/app/oracle/oradata/ORCL19C/datafileo1_mf_sysaux_mwfx062s_.dbf, old size 952320K, new size 962560K
2025-03-06T05:01:06.711159-05:00
PDB1926(5):Media Recovery Log /u01/app/oracle/fast_recovery_area/ORCL19NC/archivelog/2025_03_05/o1_mf_1_12_mwht3kf7_.arc
2025-03-06T05:01:10.716479-05:00
PDB1926(5):Resize operation completed for file# 21, fname /u01/app/oracle/oradata/ORCL19C/datafileo1_mf_system_mwfwz2wy_.dbf, old size 1146880K, new size 1157120K
2025-03-06T05:01:12.839791-05:00
PDB1926(5):Resize operation completed for file# 22, fname /u01/app/oracle/oradata/ORCL19C/datafileo1_mf_sysaux_mwfx062s_.dbf, old size 962560K, new size 972800K
PDB1926(5):Resize operation completed for file# 22, fname /u01/app/oracle/oradata/ORCL19C/datafileo1_mf_sysaux_mwfx062s_.dbf, old size 972800K, new size 983040K
2025-03-06T05:01:13.595027-05:00
PDB1926(5):Media Recovery Log /u01/app/oracle/fast_recovery_area/ORCL19NC/foreign_archivelog/orcl19nc/2025_03_06/o1_mf_1_13_mwlwlz58_.arc
2025-03-06T05:01:14.054102-05:00
PDB1926(5):Resize operation completed for file# 22, fname /u01/app/oracle/oradata/ORCL19C/datafileo1_mf_sysaux_mwfx062s_.dbf, old size 983040K, new size 993280K
2025-03-06T05:01:14.620598-05:00
PDB1926(5):Resize operation completed for file# 22, fname /u01/app/oracle/oradata/ORCL19C/datafileo1_mf_sysaux_mwfx062s_.dbf, old size 993280K, new size 1003520K
PDB1926(5):Resize operation completed for file# 22, fname /u01/app/oracle/oradata/ORCL19C/datafileo1_mf_sysaux_mwfx062s_.dbf, old size 1003520K, new size 1013760K
2025-03-06T05:01:17.810144-05:00
PDB1926(5):Resize operation completed for file# 22, fname /u01/app/oracle/oradata/ORCL19C/datafileo1_mf_sysaux_mwfx062s_.dbf, old size 1013760K, new size 1024000K
2025-03-06T05:01:19.611674-05:00
PDB1926(5):Incomplete Recovery applied until change 3798457 time 03/06/2025 05:01:00
2025-03-06T05:01:19.617495-05:00
PDB1926(5):Media Recovery Complete (orcl19c) 👈
15秒ほどでリカバリが完了したことがわかる。
最後に
CDB構成におけるデータベース・クローンの技術はPDBの可搬性を高め、様々なユースケースがあると思います。今回試したリフレッシュ可能クローンPDBも検証・開発目的だけでなく、読取り専用PDBとしても活用できることから集計やレポーティングなどの用途もあると思います。
非CDBからPDBでのリフレッシュ可能クローンPDBの利用は、既存の非CDBからCDB構成への統合・集約など移行の際に停止時間を短縮する手段にも活用できそうです。

