从OracleDatabase12c开始,ORACLE提供了云化数据库架构,提出了DBaaS的解决方案,其中最重要的就是容器和多租户,今天就来梳理一下多租户容器数据库的基础架构。
在12c中的c就是“Cloud”的意思,从实现来看,是multitenantcontainerdatabase(CDB),也即多租户容器数据库(下面我们也简称为CDB)。
什么是容器
容器,Container,其实就是由用户、模式、表、索引、序列等对象组成的集合,可以将其认为是12c之前的一个数据库。每个容器都具备唯一的标识和名称。从下面的查询结果可以验证该数据库是否是一个多租户容器数据库。
CDBroot
CDBroot通常简称为root,它是所有容器的根容器,即标号为1,名称为CDB$ROOT的容器。root中存储了管理所有PDB的系统元数据信息,当然它里面也可以存储用户数据,但是ORACLE官方是不建议这样做的。
SystemContainer
SystemContainer通常称为应用系统容器,是介于root和PDB之间的一层,它属于root,并且可以包含多个PDB。只需要在CREATEPLUGGABLEDATABASE后面标注上ASAPPLICATIONCONTAINER即可。
创建完系统容器之后,可以使用如下SQL查看:
PDB
PDB通常称为私有数据库,是用户数据的集合,包含登陆账号、表、索引等相关数据结构。每个PDB被SYS用户所拥有,CDB中的其他用户也可以连接。
PDB可以插入到根容器中,也可以插入到应用系统容器中。如上图,在根容器、每个应用系统容器都有3个PDB。
首先创建一个属于根容器的PDB,名称为pdb1,如下所示:
在应用系统容器saas_sales_ac创建一个PDB,名称为pdb2,如下所示:
下面的数据可以进行验证,PDB2的应用系统容器为4,即应用系统容器SAAS_SALES_AC。从APPLICATION_ROOT列为YES,可看成SAAS_SALES_AC缺省是一个应用系统容器。从PDB_COUNT列可以看成在根容器和应用系统容器中已经创建的PDB的数量。
从上图可以看成在一个CDB多租户容器数据库中,存在一个CDB管理员,其主要工作是为了分配PDB给不同的应用;hrpdb数据库和salespdb数据库分别有一个PDB管理员,分别管理自己负责的数据库。
PDB$SEED
在CDB安装完成后,标号为2的是一个PDB,它是一个特殊的PDB,其不能以读写模式打开,只能置为只读模式。这个PDB是用于创建新PDB时,系统默认提供的模板数据库。当然PDB也可以基于其他PDB进行创建,如下所示,pdb3是从pdb1进行创建的:
简化运维安全可靠
让运维更轻松
赞赏