Oracle 12c多租户特性详解:从Schema到PDB的变化与隔离

(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权)

编辑手记:Oracle 12c的多租户特性是Oracle Database历史上最重要的革新之一,在云时代这一特性展现出强大的整合威力,这篇文章来自<深入解析Oracle>一书的摘录。

在Oracle Database 12c版本中,一个重要的新特性:插接式数据库(Pluggable Database)被引入进来。在12c之前的版本中,Oracle数据库中的多用户管理通过Schema – 模式管理方式来实现,而在12c中,插接式数据库在更高级别实现了进一步的隔离。

1. 插接式数据简介


插接式数据库由一个使用 CDB(Container Database)选项创建的容器数据库和一个或多个 PDB(Pluggable Database)组成,CDB 作为容器容纳 PDB,而 PDB 彼此隔离,就像一个独立的数据库般在 CDB 中存在。

 

CDB 需要在创建数据库时指定选项,如下图所示,必须选择“创建为容器数据库”选项,然后才能够在其中创建 PDB,在 CDB 之外的常规数据库中是不能够包含 PDB 的。以下页面中,选择包含了1个 PluggableDatabase,CDB 和 PDB 的名称就在这个页面分别指定:

在完成 CDB 的创建之后,可以登陆到数据库,查询数据库的创建模式,在 v$database 和 v$instance 视图中都可以找到相应信息,CDB 为 YES 显示该数据库为 CDB 模式:

PDB 是一组 Schema 的集合,在 CDB 中作为一个独立的组件容器而存在。从这个意义上说,PDB 也是一种容器(Container), 而 CDB 中可以存在多种不同类型的容器。

2. CDB 的组成

 

每个 CDB 通常包含如下容器(Container):

 ① ROOT

Root 是一个系统提供的容器,用于存储公用用户,公用用户可以连接到其他容器,可以查看系统级元数据,这个 Root 容器被命名为 CDB$ROOT.

以下两种查询方式显示了这个 Root 容器的名称:

以下查询整合输出了CDB的详细信息:


② Seed PDB

种子 PDB 是一个系统级模版,CDB 可以用这个模版创建其他 PDB,种子 PDB 的名称是 PDB$SEED,其中的对象不能被修改。

种子 PDB 数据库的模板存储于 $ORACLE_HOME/assistants/dbca/templates/ 目录下,以压缩格式提供,其命名为:pdbseed.tar.gz。解压缩这个文件,其中包含如下几个文件:

这其中最为主要的是 SYSTEM 和 SYSAUX 表空间文件,这是一个种子数据库,已经内置了字典对象,如果使用模板方式建库,PDB 则由此克隆创建出来。

在创建数据库时,如果选择定制数据库方式创建,则模板文件会自行创建出来,不需要使用模板中的文件。

容器 CDB$ROOT 和 PDB$SEED 对于一个插接式数据库来说是必须的基本组件,这两者构成了插接式数据库的基础支撑。其关系如下图所示:

③ PDB

PDB 是用户基于特定需求建立的对象容器,在创建 CDB 时,可以不同时创建 PDB,PDB 随后可以根据用户的需求创立。

 

以下示意图显示,CDB 中包含了 CDB$ROOT,PDB$SEED 和两个用户 PDB,两个 PDB 分别用于 SALES 和 HR 业务应用。

上图中,以 USB 移动硬盘的方式表现 PDB,正是突出了 PDB 的 plug 和 unplug 特点,由图中可以直观的了解到插接式数据库的主要特性:

 

  1. 可以通过现有数据库快速配置和部署新的环境;
  2. 通过 unplug 和 plug 可以快速进行数据库迁移和整合;
  3. 集中的部署可以加快升级迁移的过程,缩减维护成本;
  4. 方便的整合和拆分方式便于集中部署或在压力过大时迅速拆分部署;
  5. 分离管理员的职责,强化安全管理;

如上所述,插接式数据库的一个巨大便利是,可以简化数据库的整合迁移,降低管理成本。在一个大型企业中,可能存在几百上千个数据库实例,而随着硬件性能的提升,这些数据库的资源利用率可能很低,不仅浪费硬件资源,也加重了管理负担,按照以前版本的功能进行整合或拆分,通常要进行导出导入(Expdp / Impdp 等),不仅复杂,而且涉及很多变更,通常让人望而生畏。

而如果使用插接式数据库,则可以轻松的将数据库整合,当负载过高时,又可以迁移至独立的服务器,整个过程对应用完全透明,主要通过文件复制即可完成,这对于数据库的分分合合将是一个福音。

3. 元数据的隔离

CDB 与 PDB 的隔离随之带来了一系列的好处,如元数据的分离。

在一个 Non-CDB 的数据库中,数据库自身的元数据和用户元数据是混合存储的,如创建图示中的 EMP、DEPT 等数据表,其对象信息、表信息等都要存储在 OBJ$、TAB$ 等数据字典中,这在某些特殊情况下,可能会引起核心数据字典的性能衰减和故障:

在 CDB 的模式下,由于 PDB 具有独立的 SYSTEM 和 SYSAUX 表空间,其元数据和系统元数据自然分离,用户数据的字典信息也就无需再记录到系统的元数据中,这对于核心的元数据是一种更好的隔离和保护,下图描述了在 CDB、PDB 模式下用户数据和元数据的分离关系,其中数据字典元数据也就是 Root Container:


4. CDB 的内存管理


在内存管理上,SGA 统一分配,PDB 各自的内存对象通过 ID 进行区分,下图示意了 PDB 的内存管理示意,不同的 PDB 在 SGA 中统一分配内存,通过各自标识进行空间管理和识别(通过ID标识,但是内存是融合管理的):

以下来详细分析一下 Oracle 的 PDB 内存管理。首先启动数据库,SGA 在实例启动过程中创建分配:

这个测试数据库中包含如下 PDB:

初始的,两个用户 PDB 并未打开,内存分配情况如下:

可以看到有三个 Container 分配了一系列的内存条目,这三个容器分别为0、1、2.其中0号容器是 CDB 实例:

1号 Container 是 CDB$ROOT :

如前所述,2号 Container 是 PDB$SEED.

 

查询 X$BH,可以看到不同 Container 的内存分配:

打开一个 PDB:

可以看到相应 Container 的 Buffer Cache 和 Shared Pool 对象等都已经分配:

继续打开下一个 PDB,观察内存分配情况:

查询 v$sgastat 视图可以获得一个 PDB 的 Shared Pool 内存分配情况:

同样 PGA 的内存分配也是通过 CON_ID 区分不同 PDB 的 PGA 内存使用:

如下通过内存转储命令,可以分级转储 PDB 的 Buffer Cache 内容:

可以观察到对于不同 PDB 的 Buffer Cache 内容转储:

文章转自数据和云公众号,原文链接

时间: 2024-10-01 13:16:06

Oracle 12c多租户特性详解:从Schema到PDB的变化与隔离的相关文章

Oracle 12c多租户特性详解:全局用户与本地用户的原理与维护

(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权) 编辑手记:这一节我们将介绍多租户架构中用户及权限的变化,全局用户和本地用户,管理方式和内部实现,这篇文章来自<深入解析Oracle>一书的摘录. 前情回顾:Oracle 12c多租户特性详解:从Schema到PDB的变化与隔离 COMMON 和 Local 用户 无论在 CDB 和 Non-CDB 数据库中,用户都拥有一个 Schema,拥有一系列的 Schema 对象,在 CDB 中由于 PDB 的引入,用户

Oracle 12c多租户特性详解:PDB 的出与入 InAndOut

(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权) 编辑手记:这一节我们将介绍多租户中PDB的Plug-Out 与 Plug-In与备份恢复,这篇文章来自<深入解析Oracle>一书的摘录. 将 Non-PDB 插入 CDB   在12c中,可以将一个非 CDB(也即NON-CDB)插入到 CDB 中,这个过程需要在只读模式下进行.   以下测试首先启动一个常规的 Non-CDB 数据库: 这个数据库中已经预先建立了一个数据库用户,并且有一个测试表: 在12c中

Oracle 12c多租户特性详解:PDB 的备份与恢复

(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权) 编辑手记:这一节我们将介绍多租户中的备份与恢复,这篇文章来自<深入解析Oracle>一书的摘录. 由于 PDB 的引入,Oracle 数据库的备份和恢复也发生了很多变化,基于 PDB 级别的表空间.库备份同时被支持.以下通过实际测试介绍一下12c中关于 PDB 的备份恢复过程. ⑴ 启动归档模式   首先启动数据库的归档模式(需要以IMMEDIATE方式关闭数据库,执行模式更改): 根据数据库的实际情况,设置闪

监控工具:Oracle 12c Cluster Health Monitor 详解

戴明明(Dave) Oracle ACE-A,ACOUG核心成员,宝存科技数据库方案架构师 Dave也是CSDN 认证专家,超过7年的DBA经验,擅长Oracle数据库诊断.性能调优,热衷于Oracle 技术的研究与分享.从14年开始研究基于PCIe闪存卡的数据库高可用,高性能解决方案.  编辑手记:Cluster Health Monitor 会通过OS API来收集操作系统的统计信息,如内存,SWAP空间使用率,进程,IO 使用率,网络等相关的数据.CHM 的信息收集是实时的,并保存在CHM

Oracle Database 12c Release 2安装详解

第1章 Oracle Database 12c Release 2安装详解 1.1 下载方法 oracle官网https://www.oracle.com 1)打开官方网站,找到下载连接 2)选择更多下载. 3)选择数据库版本,这里选择的是目前的最新版本 4)接收许可协议,选在linux版本进行下载 5) 接收许可协议,点击linuxx64_12201_database.zip 6)登陆oracle账户,没有的可以自己创建一个 7)然后就能够进行下载 https://docs.oracle.co

Oracle 12c多租户架构及优缺点

Oracle的多租户和MySQL,MSSQL的类似,把之前的一个实例对一个数据库的情形(RAC是多个实例对一个数据库)整合成了一个实例下可以挂多个数据库,并且定义为可插拔的,听起来很炫.就像在没有多租户特性之前,Oracle与MSSQL以及MySQL还是有很大的差异,因此对于Oracle的多租户也有一些不同的地方.本文主要描述Oracle 12c多租户架构. 一.多租户概念 Oracle多租户环境包含一个容器数据库(CDB)和零个或多个可插拔数据库(PDB),一个PDB是一个模式,模式对象,以及

Laravel 5.0 发布 新版本特性详解

 这篇文章主要介绍了Laravel 5.0 发布 新版本特性详解,本文讲解了目录结构.Contracts.路由缓存.路由中间.控制器方法注入.认证脚手架等新特性,需要的朋友可以参考下     译注: 期待 Laravel 5.0 已经很久很久了, 之前跳票说要到今年一月份发布. 从一月份就一直在刷新官网和博客, 始终没有更新的消息, 前几天终于看到官网文档切换到了 5.0 版. 新版本带来了众多令人激动的新特性, 尤其是定时任务队列和表单请求两个特性, 光看一下更新说明中的简单介绍都忍不住要上手

C#各个版本中的新增特性详解

原文:C#各个版本中的新增特性详解 序言 自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Framework库的相应支持,也不断的带给我们期待与惊喜.下面我们就对c#一路走到现在,做一个回顾与学习. C#语言目标与前行 c#的设计目标是有以下几点: 旨在是一种简单,现代,通用的面向对象编程语言. 语言及其实现应该为软件工程原理提供支持,例如强类型检查,数组维度

Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 这一章很多,但是很有趣,也是这书的最后一章知识点了,我现在还在考虑要不要写这个拼图和2048的案例,在此之前,我们先来玩玩Android5.X的新特性吧!