Oracle 19c CDB中如何创建PDB
适用范围
适用于Oracle 19c CDB
方案概述
主要介绍CDB创建的PDB常见方法。

实施步骤
一、在CDB中创建新的PDB的工具
• SQL*Plus
• SQL Developer
• Enterprise Manager Cloud Control
• Enterprise Manager Database Express
• Database Configuration Assistant (DBCA)
–clone from PDB seed
–Clone from an existing PDB
–Plug an unplugged PDB
(DBCA)从种子库PDB$SEED、现有PDB或通过插拔方式创建新的PDB
二、创建PDB的主要方式
1、基于 PDB$SEED快速创建PDB

使用PDB种子或应用程序种子的文件在CDB中创建PDB。此技术将与种子相关的文件复制到新位置,并将复制后的文件关联到新的PDB。这是默认的创建方式。其他技术则需要源数据库(PDB或非CDB)或XML文件。
使用 CREATE PLUGGABLE DATABASE 语句,通过 PDB 种子文件(PDB$SEED)在 CDB 中创建一个 PDB。
也可以使用此语句,通过应用程序种子文件或PDB种子文件在应用程序容器中创建应用程序PDB。
使用 CREATE PLUGGABLE DATABASE 语句,通过应用程序种子文件或 PDB 种子文件中的应用程序 PDB 文件来创建一个新的 PDB。
从PDB种子创建新的PDB几乎是瞬间完成的。该操作会将READONLY种子PDB中的数据文件复制到CREATE PLUGGABLE DATABASE语句中指定的目标目录。
它会创建诸如SYSTEM表空间,用于存储包含指向Oracle预定义对象的元数据的完整目录;SYSAUX表空间,用于存放本地辅助数据;以及UNDO表空间,用于存储本地回滚段。
它还会创建默认的 schemas 和公共用户,这些用户存在于PDB SEED中:SYS用户仍保留所有超级用户权限,SYSTEM用户则可管理该PDB。
同时,系统会创建一个本地用户(PDBA),并授予其本地PDB_DBA角色。在PDB的SYS用户未将权限授予本地PDB_DBA角色之前,新创建的PDBA只能连接到PDB,而无法执行其他操作。
此外,在一个 PDB 创建的时候, 会自动创建一个 PDB 同名的 Service
使用 FILE_NAME_CONVERT 子句
以具有 CREATE PLUGGABLE DATABASE 系统权限的普通用户身份连接到 CDB 根容器中:
本操作以sys用户连接到CDB中
SQL> CREATE PLUGGABLE DATABASE pdb1 ADMIN USER admin1 IDENTIFIED BY p1 ROLES=(CONNECT) FILE_NAME_CONVERT = ('PDB$SEEDdir', 'PDB1dir');
- OMF方式
- PDB_FILE_NAME_CONVERT 参数
OMF方式: DB_CREATE_FILE_DEST = '/u01/app/oradata/CDB1/pdb1'
或者设置参数 PDB_FILE_NAME_CONVERT = '/u01/app/oradata/CDB1/seed','/u01/app/oradata/CDB1/pdb1'
SQL> CREATE PLUGGABLE DATABASE pdb1 ADMIN USER pdb1_admin IDENTIFIED BY p1 ROLES=(CONNECT);
2、克隆PDB
克隆PDB是指依托源PDB或NON-CDB来创建一个新的PDB。
该技术可从源PDB或NON-CDB创建一个新的PDB。此过程会自动将新PDB插入到CDB中。
要使用此技术,您必须在 CREATE PLUGGABLE DATABASE 语句中指定源。
该源可以是以下任意一种:
Local PDB
PDB in a remote CDB
Non-CDB
目标PDB是源PDB或NON-CDB的副本,该副本称为克隆PDB。
CREATE PLUGGABLE DATABASE 语句会将源数据库中的相关文件复制到新位置,并将这些文件关联到目标 PDB。当 CDB 处于 ARCHIVELOG 模式和本地回滚模式时,源 PDB 可以在克隆过程中以读写模式打开并正常运行。这种技术称为热克隆。
从克隆过程开始到结束期间生成的归档日志必须保留,以确保克隆过程顺利完成。这样做有助于避免克隆过程中出现错误。
本地克隆
可以通过执行 CREATE PLUGGABLE DATABASE 语句,并在 FROM 子句中指定一个本地 PDB 来克隆本地 PDB。
SQL> create pluggable database PDB2 from PDB1;
远程克隆
可以通过执行 CREATE PLUGGABLE DATABASE 语句,并在 FROM 子句中指定远程 PDB 的数据库链接,来克隆远程 PDB。
SQL>create pluggable database PDB1 from PDB1@CDB1;
克隆NON-CDB
NON-CDB的步骤与克隆远程PDB的步骤非常相似。
SQL> CREATE PLUGGABLE DATABASE pdb2 FROM NON$CDB@mydb_link;
SQL>@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
refreshable clone PDB克隆可定时刷新 PDB
18c 开始有 Refreshable PDB Switchover 特性
CREATE PLUGGABLE DATABASE … REFRESH MODE 语句用于克隆源 PDB,并将克隆实例配置为可刷新。刷新该克隆 PDB 可更新其内容,以包含自上次重做日志应用以来累积的重做数据。
手动模式
SQL> create pluggable databse <PDBNAME> from <SourceDB PDBNAME>@dblink refresh mode manual;
自动模式
SQL> create pluggable databse <PDBNAME> from <SourceDB PDBNAME>@dblink refresh mode every 120 minutes;2小时自动刷新1次
基于SNAPSHOT创建PDB
可以通过执行 CREATE PLUGGABLE DATABASE … USING SNAPSHOT 语句,从 PDB 快照创建 PDB。
从PDB级别的快照创建克隆(ALTER PLUGGABLE DATABASE SNAPSHOT)。指定PDB快照的名称、SCN或时间戳。
PDB快照是PDB文件在某一时刻的副本。在创建快照时,源PDB可以是只读或可读可写的。当源PDB处于打开状态时创建的快照称为热克隆(hot clone)。
使用 CREATE PLUGGABLE DATABASE(或 ALTER PLUGGABLE DATABASE)中的 SNAPSHOT 子句手动创建快照,也可以使用 EVERY interval 子句自动创建。以下语句将创建一个名为 pdb1_wed_4_1201 的 PDB 快照:
SQL>ALTER PLUGGABLE DATABASE SNAPSHOT pdb1_wed_4_1201;
从PDB快照创建副本,在CREATE PLUGGABLE DATABASE语句中指定USING SNAPSHOT子句。例如,以下语句将名为pdb1_copy的PDB从名为pdb1_wed_4_1201的PDB级快照中克隆
SQL> CREATE PLUGGABLE DATABASE pdb1_copy FROM pdb1 USING SNAPSHOT pdb1_wed_4_1201;
创建和实现快照副本 PDB
可以从底层存储的快照中克隆PDB文件。PDB文件是稀疏的,但可以将其转为实体文件,从而创建一个独立的PDB。
SQL>CREATE PLUGGABLE DATABASE pdb1_snap_copy FROM pdb1 SNAPSHOT COPY;
创建Split Mirror克隆PDB
在 Oracle ASM 中,拆分镜像是指将某个时间点的媒体副本从主副本中分离出来。拆分后,对主副本的更新不会影响子副本。
1).通过SQL*Plus连接到 CDB 根容器。
2).执行 ALTER PLUGGABLE DATABASE … PREPARE MIRROR COPY 语句来准备源 PDB。
3).执行 CREATE PLUGGABLE DATABASE … FROM … USING MIRROR COPY 语句,从源 PDB 创建一个克隆 PDB。
4).查询 V$ASM_DBCLONE_INFO 视图以查看源 PDB、克隆 PDB 与其文件组之间的关系。
3、通过通过插拔特性把 PDB 迁移到新 CDB
我们可以通过将未插拔的PDB插入CDB来创建PDB。
要插入一个 PDB,需使用 CREATE PLUGGABLE DATABASE 语句中的 USING 子句。该子句用于指定一个 XML 元数据文件或压缩归档文件(.pdb 文件)。
使用 CREATE PLUGGABLE DATABASE … USING 语句来插入 PDB。
Unplug PDB1 from CDB1:
1). 以公共用户连接到CDB1根容器中确保具有ALTER PLUGGABLE DATABASE权限。
2). 确认 PDB1的状态是close 。
SQL>show pdbs
SQL> ALTER PLUGGABLE DATABASE pdb1
UNPLUG INTO 'xmlfile1';
3.从CDB1中删除PDB1(生产环境建议做好备份)。
Plug PDB1 into CDB2 :
1). 以公共用户连接到CDB2根容器中确保具有ALTER PLUGGABLE DATABASE权限。
2).基于生成xml文件来创建PDB
SQL> CREATE PLUGGABLE DATABASE pdb1 USING 'xmlfile1' NOCOPY;
3).打开PDB1
SQL>alter pluggable database PDB1 open;
Unplug和Plug 也可以基于DBCA工具来实施。
4、创建 Proxy PDB
代理PDB提供了对远程CDB中PDB的访问,类似于符号链接。通过引用另一个CDB中的PDB来创建代理PDB。
两个CDB需要满足
UNDO是local undo 模式
开启了ARCHIVELOG模式
在CDB1中创建PXPDB1代理PDB,该PDB作为视图引用CDB2中整个被代理的PDB1
SQL> CONNECT sys@cdb1 AS SYSDBA
SQL> CREATE PLUGGABLE DATABASE pxpdb1 AS PROXY
FROM pdb1@link_cdb2;
执行 PXPDB1 代理 PDB 中的所有语句,使其在 CDB2 的代理 PDB1 中执行。
SQL> CONNECT sys@pxpdb1 AS SYSDBA
SQL> ALTER PLUGGABLE DATABASE pxpdb1 OPEN;
SQL> SELECT * FROM app.c;
-the end-
笔者文章集合详见:
https://www.myhfxf.com
https://www.xiaofeihuangfu.com
CSDN:https://blog.csdn.net/xfhuangfu
ITPUB:https://blog.itpub.net/28373936/
微信公众号:xfhuangfu