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

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

一、多租户概念

Oracle多租户环境包含一个容器数据库(CDB)和零个或多个可插拔数据库(PDB),一个PDB是一个模式,模式对象,以及非模式对象,如到一个Oracle网络客户端作为非CDB。Oracle 12c之前的版本,都是非CDB数据库。

借用从MSSQL或者MySQL架构来看,即一个实例下面可以有多个数据库。Oracle这个多租户其实和他们的架构类似,把PDB按这种思路来理解就容易得多了。这么做最终的目的是可以充分的利用系统资源。想之前维护的一台机器上搞了5-6个实例,资源浪费,管理起来也费劲。

二、CDB容器

1、什么是CDB容器

一个CDB容器是多租户架构内的数据或元数据的逻辑集合。
下图为CDB中容器示例

每个CDB都有以下容器:

  • CDB根容器(也简称根)
    该CDB根是一个模式,模式对象,以及属于所有PDB的非模式对象的集合。根容器存储Oracle提供的元数据和公共用户。元数据的一个例子是Oracle提供的PL/SQL包的源代码。公共用户是每个容器中已知的数据库用户。根容器被命名CDB$ROOT。
  • 系统容器
    该系统包括根CDB和在CDB所有的PDBS。因此,系统容器是CDB本身的逻辑容器。
  • 零个或多个应用程序容器
    应用程序容器只包含一个应用程序根目录,并且PDB插入到该根目录中。而系统容器包含CDB根目录和CDB 内的所有 PDB,应用程序容器仅包含插入应用程序根目录的PDB。应用根属于CDB根,没有其他容器。
  • 零个或多个用户创建的PDB
    一个PDB包含特定功能集所需的数据和代码。例如,PDB可以支持特定应用,如人力资源或销售应用。您可以根据业务需求添加PDB。
    PDB属于零个或一个应用程序容器。如果PDB属于应用程序容器,那么它是一个应用程序PDB。例如,cust1_pdb与cust2_pdb应用PDBS可能属于该saas_sales_ac应用程序容器,在这种情况下,他们不属于任何其他应用程序容器。应用程序种子是可选的应用程序PDB,用作用户创建的PDB模板,使您能够快速创建新的应用程序PDB。
  • 一个种子PDB
    种子PDB是CDB可用于创建新的PDB的系统提供的模板。种子PDB命名PDB$SEED。您不能添加或修改对象PDB$SEED。

2、没有应用容器的CDB

此示例显示一个简单的CDB,其中包含五个容器:系统容器(整个CDB),CDB根,PDB种子和两个PDB。每个PDB都有自己的专用应用程序。不同的PDB管理员管理每个PDB。一个公共用户存在于具有单个身份的CDB上。在这个例子中,公共用户SYS可以管理根和每个PDB。在物理层面上,该CDB具有数据库实例和数据库文件,就像非CDB一样。

如下图没有应用程序容器的CDB

3、带有应用程序容器的CDB

在本变体中,CDB包含一个名为的应用程序容器saas_sales_ac。在应用程序容器中,应用程序PDB cust1_pdb支持一个客户的应用程序,并且应用程序PDB cust2_pdb支持不同客户的应用程序。CDB还包含一个名为的PDB hrpdb,它支持HR应用程序,但不属于应用程序容器。

下图为带有应用程序容器的CDB

在这个例子中,多个DBA管理CDB环境:
  CDB管理员管理CDB本身。
  应用程序容器管理员管理saas_sales_ac容器,包括应用程序安装和升级。
  应用程序PDB管理员管理的两个PDBS saas_sales_ac容器:cust1_pdb和cust2_pdb。
  PDB管理员管理hrpdb。

三、CDB要点理解

  • 一个多租户数据库有一个CDB容器,可以理解为一栋写字楼。
  • 多租户数据库有一个数据库实例,一个系统全局区以及一组后台进程,可以理解为写字楼的物业,安保人员等等,服务于所有租户。
  • 有零个和多个PDB数据库,可以理解为各个企业在当前写字楼租用的办公室。有些企业有多间办公室(多个PDB服务与某个特定应用程序),有些企业只有一间办公室(单个PDB及应用程序)。
  • 根容器中定义的对象可以由所有PDB共享及访问。可以理解为写字楼的公共区,如电梯,楼台,公共洗手间等。
  • 各个PDB服务通过数据库监听器提供给用户,可以理解为写字楼大厅水牌,按照水牌,即可以找到对应公司具体楼层及位置。
  • PDB内定义的对象为私有的,每个PDB都有自己的数据字典。可以理解为不同的企业财务,业务各自独立,如有业务往来,那就签协议(fast intra-CDB dblink)

四、多租户架构的优缺点

1、非CDB架构的挑战

整合前,如下图所示

  • 整合前集中常见的架构情形

  N多的应用服务器对应到N多的数据库服务器 #Author : Leshami

  几个或N个数据库服务器实例放在同一台服务器 #Blog : http://blog.csdn.net/leshami

  • 存在的问题

  DBA团队必须分别管理每个数据库的SGA,数据库文件,帐户,安全性等

  大部分系统资源变成闲置,即使是在一台服务器上放置多个实例,本质上依旧是单独管理(数据库级别)

  各个数据库之间的交互远程调用效率低下(dblink)

2、整合后的优点

整合后图示如下:

  • 整合的实质

  将数据从位于不同服务器上的多个数据库合并到一台服务器上,且无需更改现有模式或应用程序

  • 整合后的优点

    • 降低成本(10台服务器变成1台,共享进程,共享系统资源)
    • 更容易和更快速的数据和代码的移动(可拔插数据库,像U盘一样,能不快速吗)
    • 更轻松地管理和监控物理数据库(至少不用连接N多服务器来观察)
    • 分离数据和代码
    • 安全分离管理权限(各个PDB之间的权限依旧独立)
    • 轻松性能调优(不用看辣么多的AWR,不用研究是不是哪个服务器SGA多了,哪个PGA少了)
    • 补丁升级更容易,一次搞定N个数据库(绿盟很厉害,一扫N台数据库都得打补丁)
    • 系统管理员不需要分配辣么多的oracle用户了

3、整合后的缺点

  • DBA管理人员锐减,要失业了
  • 每一个调整都要当心了,牵一发动全局,你懂的
  • 发现中……

参考链接: http://docs.oracle.com/database/122/CNCPT/introduction-to-the-multitenant-architecture.htm#CNCPT89242

时间: 2024-08-03 15:03:24

Oracle 12c多租户架构及优缺点的相关文章

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

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

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

(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权) 编辑手记:Oracle 12c的多租户特性是Oracle Database历史上最重要的革新之一,在云时代这一特性展现出强大的整合威力,这篇文章来自<深入解析Oracle>一书的摘录. 在Oracle Database 12c版本中,一个重要的新特性:插接式数据库(Pluggable Database)被引入进来.在12c之前的版本中,Oracle数据库中的多用户管理通过Schema – 模式管理方式来实现,而

【安全警告】Oracle 12c 多租户的SQL注入高危风险防范

用Oracle多租户选件时,由于Container容器和PDB融合共存,则权限控制必将更加重要,在之前的文章中我们提到,Oracle 12.2 的 lockdown profile就是为了实现PDB中更为全面的权限控制. 我们在2016年『比特币事件』中,总结了:数据安全的十六大军规,其中有一条也明确提到最小权限守则,而且要真正实现权限管理. SQL注入攻击的风险 我们来看看如果权限控制不当,可能遭遇到的数据库安全风险.根据最近披露的风险之一,通过SQL注入可能影响数据库的安全,以下问题影响到多

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 CDB数据库中数据字典架构

数据字典就是元数据的集合,比如创建的表,列,约束,触发器等等这些都是元数据,需要保存到数据库中.除此之外,Oracle自身的一些数据库对象,如目录,PL/SQL代码等等这些都是元数据,都需要存放在数据字典中.随着12c 容器数据的普及,Oracle数据字典发生了哪些变化呢,下文即是具体描述. 一.数据字典及其形成 1.数据字典 数据字典是元数据的集合,从逻辑上和物理上描述了数据库及内容,存储于SYSTEM与SYSAUX表空间内的若干段. SYS用户拥有所有的数据字典表,数据字典基本一般以结尾,如

Oracle 12c手工建库(非CDB及CDB创建)

对于Oracle数据库的创建,Oracle除了支持dbca(GUI界面),同时也支持手工方式创建数据库,即使用CREATE DATABASE语句创建数据库.使用此语句对使用DBCA的一个优点是可以从脚本内创建数据库.在Oracle 12c版本中支持12c之前的非CDB数据库以及CDB容器数据库.因此创建方式略有不同.本文同时描述2种不同数据库的手工创建方法. 一.12c手工创建非CDB数据库 步骤1:指定实例标识符(SID) ORACLE_SID的环境变量用于该实例从稍后可能创建并同时在同一主机

回答了这四个问题,少踩12c 多租户的好多坑

ACOUG的年终大会上,我分享了一个主题,列举了使用Oracle 12c多租户的过程中可能遇到的各种坑,当你使用一个新产品或者新特性时,如果你不了解,就可能是使用中,陷入其中. 首先我们已经知道,Oracle 12c的多租户特性,允许在一个容器数据库中,创建多个PDB,这些PDB彼此隔离和独立,但是依赖CDB而存在. 问题一:PDB丢失一个文件数据库会如何? 现在请大家思考一个问题:如果某个PDB中,因为意外而丢失了一个数据文件,那么数据库会怎样? 目前我们涉及的版本包括:12.1.0.1.0

《Oracle数据库管理与维护实战》——1.3 Oracle 12c新特性

1.3 Oracle 12c新特性 Oracle数据库管理与维护实战 纵观甲骨文全球大会和甲骨文公司的各种资讯,我们可以发现云计算和大数据是两个重要的主题,Oracle 12c则融合了这两大主题.与以往的Oracle数据库相比,Oracle 12c在16个方面进行了更新.本节将详细介绍Oracle 12c数据库中的16个新特性. 1.3.1 支持多线程模式 在Oracle 12c中,Oracle引入了多线程模式,允许在Windows平台之外的UNIX.Linux等系统使用多线程模式.结合多进程与