自己也在本地尝试了一下,其实中间了花了些时间,中途总是被各种事情打断,所以留下的都是一些零碎的知识片段,自己索引把环境重新删了再做几次。
在这种尝试中我试了两种学习方法,第一种是压根不看官方文档,纯是凭着感觉做,碰到问题查google,百度,metalink来做,最后也勉强出了点成果,但是总体感觉有些问题的解决不是常规思路,月解决离本身的学习好像偏差越大。最后竟然还有改到隐含参数,我觉得对于初入门的学习来说,还是很不可取的,所以尽管勉强出了点东西,但是我的感觉是这种学习方法不系统不全面,很容易被各种攻略来影响,还是不推荐的。
然后中间隔了一天,今天再来准备抽一个小时左右来学习一下,发现官方文档着实要详细的多,而且介绍的系统性,更全面,很多博客中的图也基本都是官网中的,所以说自己学习的时候就会方便一些,照着做出错的概率要小,不会很折腾。
不过文档我也是选看,我整理了一下我掌握的信息,做一个简单的总结。
这个图是官方的,我觉得实在弄不出比这个更好的图了,直接贴出来。这个里面的CDB就是容器,PDB就是插件数据库,hrpdb,salespdb都有对应的PDBA来管理,综合的管理由CDB管理员来负责。Root是存储了容器的基本模板,而seed则是提供了一套模板机制。可以基于seed模板来创建对应的PDB,我要演示的也是这个方法。

首先我们创建一个12c的数据库自带pluggable database,还是选用dbca silent方式来做,一个命令直接搞定。
这种方式和10g,11g的主要差别就是有一个创建CDB的选项。
dbca -silent -createDatabase -templateName $ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc -gdbname newtest -sid newtest? -characterSet UTF8? -createAsContainerDatabase true -sysPassword oracle -systemPassword oracle
Copying database files
1% complete
3% complete
11% complete
18% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete
46% complete
47% complete
52% complete
57% complete
58% complete
59% complete
62% complete
Completing Database Creation
66% complete
70% complete
74% complete
85% complete
96% complete
100% complete
创建完成之后我们就开始来了解一下CDB,PDB的一些简单操作。
首先来个二连发,看看容器id和容器name
sqlplus / as sysdba
SQL> show con_id con_name
CON_ID
------------------------------
1
CON_NAME
------------------------------
CDB$ROOT
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/U01/app/oracle/oradata/newtest/system01.dbf
/U01/app/oracle/oradata/newtest/sysaux01.dbf
/U01/app/oracle/oradata/newtest/undotbs01.dbf
/U01/app/oracle/oradata/newtest/users01.dbf
切换到seed,查看容器的id和name
SQL> alter session set container=pdb$seed;
Session altered.
SQL> show con_id con_name
CON_ID
------------------------------
2
CON_NAME
------------------------------
PDB$SEED
查看数据文件,这个时候可以看出其实root和seed都会有独立的system表空间。
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/U01/app/oracle/oradata/newtest/pdbseed/system01.dbf
/U01/app/oracle/oradata/newtest/pdbseed/sysaux01.dbf
当然想得到更清晰的pdb概览信息,可以使用show pdbs
SQL> show pdbs;
CON_ID CON_NAME? ? ? ? ? ? ? ? ? ? ? OPEN MODE? RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED? ? ? ? ? ? ? ? ? ? ? READ ONLY? NO
我们再用sysdba登录,如果存在多个pdb,show pdbs显示的结果会更多。目前还没有创建PDB,只有seed一个
SQL> conn / as sysdba
Connected.
SQL> show pdbs
CON_ID CON_NAME? ? ? ? ? ? ? ? ? ? ? OPEN MODE? RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED? ? ? ? ? ? ? ? ? ? ? READ ONLY? NO
我们来创建一个新的PDB,使用基于seed来创建的方式。

默认创建PDB的时候,如果不指定文件的映射关系,会有下面的问题,我们可以省事先用OMF来做。
SQL>? CREATE PLUGGABLE DATABASE pdb1 ADMIN USER pdb1admin IDENTIFIED BY oracle;
CREATE PLUGGABLE DATABASE pdb1 ADMIN USER pdb1admin IDENTIFIED BY oracle
*
ERROR at line 1:
ORA-65016: FILE_NAME_CONVERT must be specified
SQL>alter system set db_create_file_dest='/U01/app/oracle/oradata/newtest';
System altered.
SQL> CREATE PLUGGABLE DATABASE pdb1 ADMIN USER pdb1admin IDENTIFIED BY oracle;
Pluggable database created.
启动一下新的pdb
SQL> alter pluggable database pdb1 open;
Pluggable d