oracle 12c 多租户体系结构概念

1) 容器、CDB、PDB

多租户体系结构允许Oracle数据库作为多租户容器数据库(CDB)运行。

CDB包括零个、一个或多个客户创建的可插拔数据库(PDBs)。PDB是模式、模式对象和非模式对象的便携式集合,在Oracle Net客户端看来,这些对象是non-cdb。Oracle数据库12c之前的所有Oracle数据库都是non-cdbs数据库。

容器既可以是PDB也可以是root。root 容器是schemas ,schema objects和属于PDBs的non-schema objects对象的集合;每个CDB有如下几个容器:

l 有且仅有一个root容器,即CDB$ROOT

l 有且仅有一个seed PDB ,即PDB$SEED,它是创建PDB的模板。由系统创建并维护,用户不能增加、修改其中对象;

l 0或者多个用户创建的PDB

Figure 17-1 CDB with Two PDBs

通过这幅图来简单说明一下多租户容器数据库;oracle 12c可以创建CDB数据库,也可以创建non-CDB数据库。non-CDB数据库不用多说,即可以像之前的11g,10g数据库一样使用。CDB数据库多了容器的概念,可以理解为CDB中的所有数据库都是容器,CDB$ROOT、PDB$SEED、PDB(hrpdb、salespdb)都是容器;

l CDB$ROOT根容器比较特殊,有且仅有一个,存储的是整个CDB的元数据和common users,系统包的源代码;例如,系统性能视图的定义和数据都统一存储在这个容器中,其他PDB通过metadata link和object link机制进行调用;

l PDB$SEED是系统内置创建用户PDB的模板。由系统创建并维护,用户不能增加、修改其中对象;

l PDB则是用户创建和迁移过来的non-cdb数据库,可以由PDB$SEED新建,通过其他PDB创建,或者从non-cdb创建而来;单独存储用户数据,可以单独启停,可以单独插拔的数据库;

另外,CDB中数据库管理与之前会有不少的差别,主要体现在数据字典、用户(common、local)、角色(common、local)、权限和角色的授予、审计配置、服务(service,connect)等等方面。不理解、不熟悉这些差别会对日常运维产生不少的困扰;上面简单介绍了逻辑层的一些概念,下面再看一下物理层的数据文件、表空间的差别;

2) CDB中的表空间和数据文件

Figure 18-8 Architecture of a CDB

图中可以看到,CDB实例可管理多个容器,每个容器(PDB、CDB$ROOT)都有自己的system、sysaux、temp等表空间;undo表空间和online redo log通过CDB$ROOT统一管理;每个PDB有各自用户表空间;所有容器的表空间对应的数据文件,临时文件分别独立存放和管理;控制文件和参数文件有CDB实例管理;


3)CDB的优点

•降低成本

通过将硬件和数据库基础设施整合到一组后台进程,并有效地共享计算和内存资源,可以降低硬件和维护成本。

==》

•更容易、更快速地移动数据和代码

根据设计,可以将PDB插入CDB,将PDB从CDB中拔出来,然后将这个PDB插入另一个CDB。因此,您可以轻松地将应用程序的数据库后端从一台服务器移动到另一台服务器。

•更容易管理和监控物理数据库

CDB管理员可以通过对用户和CDB root执行单个操作(例如打补丁或者执行RMAN备份),将环境作为一个集合来管理。

•数据和代码的分离

尽管被整合成一个单一的实体CDB,但PDBs模仿了传统非cdbs的行为。例如,PDB管理员可以在PDB上下文中刷新共享池或缓冲区缓存,而不会影响CDB中的其他PDBs。

•易于性能调优

与多个非cdbs相比,CDB更容易收集性能指标。确定一个SGA的大小比确定几个SGA的大小更容易。

•支持Oracle数据库资源管理器

在任何共享资源环境中,管理员必须管理系统资源,以便为用户提供可预测的环境,并处理意外或短暂的资源争用。要解决这些问题并提供资源使用监视,您可以使用Oracle数据库资源管理器。

•减少补丁和升级

将一个补丁应用于一个CDB比应用于多个非cdbs要容易,升级一个CDB比升级多个非cdbs要容易。

当您在多个Oracle数据库安装的不同硬件上部署了许多非cdbs时,多租户环境尤其有用。这些非cdbs可能只使用硬件资源的一小部分,而且每个都可能不需要全职数据库管理员来管理。

通过将这些非cdbs组合到CDB中,可以更好地利用硬件资源和数据库管理员资源。此外,您可以将PDB从一个CDB移动到另一个CDB,而不需要更改依赖于PDB的应用程序。