概述
在容器数据库CDB里面如何创建PDB,官方文档给出了一张创建PDB技术选项图,图片如下:
以下基于Oracle19c做演示。
一、从种子创建PDB
1、概述
使用种子(PDB
S
E
E
D
)
创
建
新
的
P
D
B
,
过
程
是
把
P
D
B
SEED)创建新的PDB,过程是把PDB
SEED)创建新的PDB,过程是把PDBSEED中的数据文件复制到 CREATE PLUGGABLE DATABASE 语句中定义的目标目录中。如下图:
整体过程:
1)从 PDB$SEED 中复制数据文件
2)创建 SYSTEM 和 SYSAUX 表空间
3)创建新目标目录,并在根容器中记录元数据进行关联
4)创建临时表空间 TEMP
5)创建公共用户 SYS 和 SYSTEM
6)创建默认服务
2、使用位置子句创建(推荐)
所谓使用位置子句的意思就是:在创建的语句中直接指定目标目录。
2.1、FILE_NAME_CONVERT
使用 FILE_NAME_CONVERT 参数指定目标目录
create pluggable database pdb2 admin user hwb identified by hwb roles=(connect) file_name_convert=('/oracle/oradata/SRM/pdbseed','/oracle/oradata/SRM/pdb2');
注意:语句中的 roles=(connect)是直接授予了该用户的 create session 系统权限,就是允许连接登陆(connect是角色权限包,里面包含 create session 系统权限)
2.2、CREATE_FILE_DEST
使用 CREATE_FILE_DEST 参数指定
!mkdir /oracle/oradata/SRM/pdb3
create pluggable database pdb3 admin user hwb identified by hwb roles=(connect) create_file_dest='/oracle/oradata/SRM/pdb3';
注意:仔细观察上面两个参数的使用。一个参数指定两个路径(种子路径,新路径),一个参数指定一个路径(新路径)。
补充:
如果想要在创建PDB时不指定路径,也可以提前定义好参数DB_CREATE_FILE_DEST或者PDB_FILE_NAME_CONVERT,但是每次都得设置这个参数,所以我还是不推荐这个方式,直接自己定义路径就可以了,不用搞那么多乱七八糟的。
二、克隆本地PDB
1、概述
克隆本地PDB的意思是指:源PDB位于本地CDB中,在当前CDB内,通过某个PDB(非PDB$SEED种子)来克隆新的可插入数据库PDB。
整体过程为:
1)设置相关参数或子句
2)连接到根后将被克隆的PDB置为只读模式
3)开始克隆
4)打开被克隆的PDB和新的PDB
2、设置相关参数
这里可以设置 OMF 参数 DB_CREATE_FILE_DEST=‘具体路径’;
或者设置 PDB_FILE_NAME_CONVERT=‘本地PDB路径’,‘新的PBD路径’;
或者在创建语句中使用 FILE_NAME_CONVERT=(‘本地PDB路径’,‘新的PDB路径’); 子句
或者在创建语句中使用 CREATE_FILE_DEST=‘新的PDB路径’;子句
--以设置DB_CREATE_FILE_DEST='具体路径'; 为例
!mkdir /oracle/oradata/SRM/pdb4
show parameter db_create_file_dest;
alter system set db_create_file_dest='/oracle/oradata/SRM/pdb4';
3、设置被克隆的PDB为只读模式
show pdbs;
alter pluggable database pdb close immediate;
alter pluggable database pdb open read only;
4、克隆新的PDB
从PDB1克隆PDB4
create pluggable database pdb4 from pdb;
show pdbs
5、打开新的PDB
alter pluggable database pdb4 open read write;
alter pluggable database pdb close;
alter pluggable database pdb open read write;
show pdbs