在Oracle database 12c发行版中,引入了多租户的概念。而该概念的实现则是通过:数据库容器与可插拔数据库实现的。
在过去,一个数据库实例只能访问一个数据库(这是标准的运行状态:单实例模式)。
可能发生的情况是多个实例访问一个数据库,这就是Real Application Cluster的架构。
但从12c开始,一个实例是可能对应多个数据库的,这就是数据库的多租户架构(Multitenant Architecture)。
Multitenant_Architecture
在一个多租户架构中只有一个多租户容器数据库(Container DB,CDB),多个用户可以在该容器库中创建多个可插拔数据库(Pluggable DB,PDB)。
对于访问数据库的客户端而言,PDB最终以普通的(非CDB)的形式展现,与12c之前的数据库访问与操纵没有区别。
(12C之前的数据库都是非CDB的。)

判断当前的数据库是否为CDB:

v$database.cdb,标注了数据库实例的多租属性,如果为YES则表示该实例为容器库,如果为NO则表示该实例不是容器库。
需要注意的是:
一个库是否是CDB是在它创建时指定的,不能够将一个非CDB的库转换为CDB,也不能将一个CDB的库转为非CDB。
创建数据库时指定CDB有两种方法:
1.SQL语句建库
和过去建库的方式一样,通过“create database …”可以创建一个数据库。如果希望它为CDB的库,则需要在“create database …”的最后跟上选项“enable pluggable database”即可。否则,如果没有跟上“enable …”则创建的是非CDB的库。
2.DBCA图像化工具建库:
dbca_1

dbca_2

dbca_3

dbca_4

dbca_5

dbca_6

dbca_7

dbca_8

dbca_9

dbca_10

dbca_11

dbca_12_1

dbca_12_2

dbca_12_3

dbca_12_4

dbca_13

dbca_14

dbca_15

dbca_16

每一个CDB都会包含一个Root容器。
一个CDB旗下的所有PDB都属于该ROOT容器。
它包含了Oracle官方提供的元数据,以及公共用户。公共用户是每个容器中的PDB库的使用者。
ROOT容器的名称为:CDB$ROOT。

每个CDB夜都会有一个种子PDB。
种子PDB是CDB用于创建新的PDB的模板,该模板由系统提供。
用户不能添加或者修改种子PDB中的对象。
种子PDB的名称为:PDB$SEED。

PDB通常是为了支持特定的应用而被特定的用户专门创建的,它包含支持特定业务的特定特性及其结构数据与代码。
如下:
CDB_PDB_Example_1
如上图所示,该CDB中包含了两个PDB:
一个种子PDB以及两个PDB。
两个独立的PDB分别服务于不同的业务系统。
在数据库端可以看到不同的PDB具有自己的管理账户,而对CDB的管理也是如此。
它们均有特定的用户实施数据库端的管理与运维任务。

可以将过去的(12c之前的)多个数据库整合到单个计算机上的单个数据库中。
这个过程称为:数据库整合,Database Consolidate。
Single_CDB

创建一个PDB库。
通过SQL语句“create pluggable database …”可以创建一个PDB的数据库。
create_pdb_statement

通过种子PDB创建PDB:
create_pdb_from_seed
Eg.

查看ALERT日志:

命令:tail -f alert_atlas.log

通过克隆创建一个PDB。
create_pdb_from_clone
通过克隆的方式创建PDB,克隆的源,可以选择当前CDB中的另一个PDB,也可以通过DB Link选择另一个CDB中的某一个PDB。

Alert日志:

注意:
通过克隆方式创建PDB,需要源PDB处于OPEN的模式。
否则你会报出下列错误:

Alert Log:

启动一个PDB:

Alert日志:

既然是PDB是可插拔的数据库。
那么接下来演示关于PDB的拔出与插入。
拔出一个PDB库:

Alert日志:

通过插入创建一个PDB。
create_pdb_from_plug
通过上图可以看到,通过插入的方式增加一个PDB是基于PDB的数据文件组以及一个包含元数据的XML文件的。
eg.将上文中Unplug的PDB(db_logic)重新加入CDB
通过上文的操作,可以看到:
XML文件位于:/home/oracle/db_logic.xml
PDB有关的数据文件位于:/oradata/ATLAS/06E0B924516C1CA4E053827CA8C0A438/(DB_LOGIC的CON_ID为3,ID:3对应的数据文件均位于该路径下;同时,在XML文件中,也可以找到相应的记录)

插入PDB:

Alert日志:

CDB与PDB的切换:

创建了PDB后,在EM中是可以看到的:
em_cdb_pdb
em_cdb_pdb_detail
——————————————————————————
Ending。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

隐藏
变装