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

简介:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

(题图来自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 的名称就在这个页面分别指定:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


2. CDB 的组成

 

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


 ① ROOT

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


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


② Seed PDB


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


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


③ PDB


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

 

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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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

 

  1. 可以通过现有数据库快速配置和部署新的环境;

  2. 通过 unplug 和 plug 可以快速进行数据库迁移和整合;

  3. 集中的部署可以加快升级迁移的过程,缩减维护成本;

  4. 方便的整合和拆分方式便于集中部署或在压力过大时迅速拆分部署;

  5. 分离管理员的职责,强化安全管理;


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


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


3. 元数据的隔离


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


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


4. CDB 的内存管理


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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


1号 Container 是 CDB$ROOT :


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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

 

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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


打开一个 PDB:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


文章转自数据和云公众号, 原文链接
相关文章
|
22天前
|
SQL 机器学习/深度学习 Oracle
关系型数据库Oracle关键特性
【7月更文挑战第5天】
28 3
|
7天前
|
存储 Oracle 关系型数据库
Oracle 12c支持哪些数据类型?
【7月更文挑战第20天】Oracle 12c支持哪些数据类型?
17 2
|
7天前
|
SQL Oracle 关系型数据库
Oracle 12c有哪些新特性?
【7月更文挑战第20天】Oracle 12c有哪些新特性?
14 2
|
20天前
|
存储 Oracle 关系型数据库
Oracle数据库ACID特性
【7月更文挑战第6天】
31 6
|
2月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之可以通过配置Oracle数据库的schema注册表来监测表结构的变化吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
32 1
|
2月前
|
存储 NoSQL 关系型数据库
实时计算 Flink版操作报错之抽取Oracle11g时,报错: "Retrieve schema history failed, the schema records for engine ... has been removed",怎么处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
监控 Oracle 关系型数据库
Oracle 12c的Adaptive执行计划:数据的“聪明导航员”
【4月更文挑战第19天】Oracle 12c的Adaptive执行计划是数据库查询的智能优化工具,能根据实际运行情况动态调整执行策略。它像一个聪明的导航系统,不仅生成初始执行计划,还能实时监控并适应统计信息和资源变化,例如自动切换索引或调整并行度。此外,它支持自适应连接和统计信息收集,提升处理复杂查询和变化数据环境的能力。数据管理员应充分利用这一特性来优化查询性能和用户体验。
|
2月前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
2月前
|
SQL Oracle 关系型数据库
Oracle 数据泵导出导入(映射表空间、Schema)
Oracle 数据泵导出导入(映射表空间、Schema)
|
2月前
|
SQL Oracle 关系型数据库
Oracle 12c的TOP N语句:数据排名的“快速通道”
【4月更文挑战第19天】Oracle 12c的TOP N语句是用于快速获取数据集排名前N的记录的SQL查询方法,特别适合寻找最具代表性的数据。通过指定排序条件和数量,TOP N能高效筛选出所需信息,例如最高销售额产品或最大访问量网页。在Oracle 12c中,查询优化器对TOP N查询进行了优化,保证快速返回结果,并提供丰富的排序和过滤选项。基本用法如`SELECT ... ORDER BY ... FETCH FIRST N ROWS ONLY`,还可结合`OFFSET`进行分页查询或用`WITH TIES`保持结果完整性。掌握TOP N语句能提升数据分析效率,助力企业决策。

推荐镜像

更多