Oracle Database 12c数据库原理 第17章 多租户架构入门

17.1、关于多租户架构    

多租户架构(multitenant architecture)使得Oracle数据库可以作为一个包含0个、1个或者多个用户创建的可插拔式数据库(PDB)的多租户容器数据库(CDB)。PDB是一个模式、模式对象和非模式对象的便携式集合,以一个非CDB形式展现给Oracle Net客户端。Oracle Database 12c之前的数据库都是非CDB。

17.1.1、CDB中的容器    

容器(container)可以是一个PDB或者root容器(也称为root)。Root容器是一个模式、模式对象和非模式对象的集合,所有的PDB都属于root。

每个CDB都包含以下容器:

  • 一个root。Root包含Oracle提供了元数据和公用用户,例如Oracle提供的PL/SQL包的源代码。公用用户是每个容器中都可以使用的数据库用户。Root容器的名称为CDB$ROOT。
  • 一个种子PDB。种子PDB是系统提供的一个模板,可以用于CDB创建新的PDB。种子PDB的名称为PDB$SEED。用户不能添加或者修改PDB$SEED中的对象。
  • 零个或者多个用户创建的PDB。PDB由用户创建,包含支持特定特性的数据和代码。一个PDB可以支持一个特点应用,例如人力资源或者销售。创建CDB时不会创建PDB,可以基于业务需求添加PDB。    
下图显示了一个拥有4个容器的CDB:root,种子PDB以及2个PDB。每个PDB拥有自己专有的应用,并且由它自己的PDB管理员进行管理。一个公用用户在CDB中使用单个身份认证。在下例中,公用用户SYS可以管理root和每个PDB。在物理层,该CDB拥有一个数据库实例和数据库文件,与非CDB一样。

bb

17.1.2、多租户架构中的用户接口

用户可以在CDB和非CDB中使用相同的工具,例如:

  • SQL*Plus命令行
  • Oracle Enterprise Manager Cloud Control
  • Oracle Database Configuration Assistant

17.2、多租户体系结构的优势

大型企业可能使用成百上千个数据库。通常这些数据库运行在不同物理服务器的不同平台上。由于硬件技术的改进,尤其是CPU数量的增加,服务器能够处理更多的工作负载。数据库可能只使用了服务器硬件容量的一小部分。这种方式既浪费硬件,又浪费人力资源。

例如,100台服务器,每台服务器上安装了一个数据库,每个数据库仅仅使用了10%的硬件资源和管理员10%的时间。DBA团队必须单独管理每个数据库得SGA、数据库文件、账户、安全等等,同时系统管理员必须维护100台不同的计算机。     图17-1使用缩小的比例显示了该问题,图中包含11个数据库,每个数据库拥有自己的应用和服务器。一个首席DBA监督一个4位DBA的团队,每个DBA负责2到3个数据库。

图17-1 整合前的数据库环境

bb

对于管理问题的典型解决方案是在每台服务器上安装多个数据库,但是问题在于多个数据库实例并不共享后台进程、系统和进程内存或者Oracle元数据。另一个方法时将数据逻辑分隔到不同的模式或者虚拟私有数据库中,而它的问题在于虚拟实体难于管理、保护和传输。

17.2.1、数据库整合

将数据从多个数据库整合到单个计算机上的单个数据库的过程被称为数据库整合(database consolidate)。从Oracle Database 12c开始,Oracle多租户选项能够在不需要改变已有模式或应用的前提下整合数据。

PDB/非CDB兼容性保证意味着对于使用Oracle Net连接的客户端,PDB与非CDB表现一致。使用非CDB的应用程序后台的安装方案同样可以适用PDB,并且产生的结果相同。同样,连接到PDB的客户端代码的行为与连接到非CDB的客户端代码的行为相同。

针对整个非CDB的操作能够以相同的方式用于整个CDB,例如,Oracle Data Guard和数据库备份与恢复。因此,非CDB的用户、管理员以及开发人员在数据库被整合后将会拥有相同的体验。

图17-2描述了图17-1中的数据库被整合到一个计算机后的结构。DBA团队人员从5个减少到3个,一个管理CDB的CDB管理员,以及2个分别管理PDB的PDB管理员。

图17-2 单个CDB

bb

使用多租户结构进行数据库整合具有以下优势:

  • 降低成本。通过整合硬件,共享数据库内存和文件,减少了硬件、存储、可用性以及劳动力成本。例如,一台服务器上的100个PDB共享一个数据库实例和一组数据库文件,因此需要更少的硬件和相关人员。
  • 更容易更快捷的数据和代码迁移。通过设计,可以快速地将一个PDB插入一个CDB,将PDB从CDB拔出,然后将该PDB插入另一个CDB。插入和拔出的实现技术与可传输表空间技术类似。
  • 更容易管理和监控物理数据库。CDB管理员可以专注于一个物理数据库(一组文件和一组数据库实例),而不是分别关注数十或数百个非CDB。备份策略和灾难恢复更加简单。
  • 数据和代码的分离。虽然整合成一个物理数据库,PDB仍然模拟非CDB的行为特性。例如,如果用户错误导致关键数据的丢失,PDB管理员可以使用Oracle Flashback或者时间点恢复找回丢失的数据,同时不会影响到其它的PDB。
  • 安全的管理职责分离。公用用户可以连接到拥有权限的任何容器,而本地用户仅限于连接到特定的PDB。CDB管理员可以使用一个公用用户账户管理CDB,PDB管理员可以使用一个本地账户管理单个PDB。因为权限只能用于授予的容器之内,在一个PDB上的本地用户没有在同一个CDB的其他ODB上的权限。
  •  易于性能优化。单个数据库比多个数据库更容易进行性能指标收集,1个SGA比100个SGA更容易调整大小。
  • 支持Oracle数据库资源管理器。在多租户环境中,一个关心的问题是同一个计算机上的多个PDB之间的系统资源竞争。另一个是为了更一致、可预测性能的资源使用限制。为了解决这类资源竞争、使用以及监控问题,可以使用Oracle数据库资源管理器。
  • 减少数据库补丁和升级。1个数据库比100个数据库更容易应用补丁,也更容易升级。

17.2.2、可管理性    

除了数据库整合之外,多租户体系结构还拥有其他优点。这些优点源于将PDB相关的数据和数据字典元数据存储在PDB内部,而不是统一存储在一个地方。这种方式使得PDB作为一个独立的单元更易于管理,即使只有一个PDB时亦是如此。

数据字典分离可以带来以下优势:

  • 更易于迁移数据和代码。例如,可以从CDB中拔出一个PDB,然后将它插入一个更高版本的CDB中,而不是升级CDB。
  • 更易于测试应用。可以在一个测试PDB中开发应用,发布时将其插入产品CDB。

17.3、数据库整合流程    

一个数据库在存在期间,只能是一个CDB或者一个非CDB,不能将非CDB转换为CDB,反之亦然。必须在创建时指定为CDB,然后在其中创建PDB。

17.3.1、创建一个CDB

SQL语句CREATE DATABASE ... ENABLE PLUGGABLE DATABASE可以创建一个新的CDB。如果没有指定ENABLE PLUGGABLE DATABASE从句,那么新建的数据库为非CDB,并且不能包含PDB。

Oracle数据库随着root(CDB$ROOT)自动创建一个种子PDB(PDB$SEED)。下图显示了一个新建的CDB:

bb

示例17-1演示了一个简单的查询,用于判断当前连接的数据库是否为一个非CDB,或者CDB中的一个容器。

示例17-1 判断数据库是否为CDB

SQL> SELECT NAME, CDB, CON_ID FROM V$DATABASE;  

NAME      CDB     CON_ID

--------- --- ----------

CDB1      YES          0

17.3.2、创建一个PDB

SQL语句CREATE PLUGGABLE DATABSE可以创建一个PDB。创建的PDB自动包含一个完整的数据字典,其中包括元数据和到root中系统提供的对象的内部链接。只能在CDB中创建PDB,而不能另一个PDB中创建PDB。 下图描述了创建PDB的可选方式:

bb

下图显示了一个包含6个PDB的CDB。hrpdb是一个新建的PDB。salespdb是一个已经存在的PDB,它从另一个CDB中拔出并插入到该CDB中。剩余的4个PDB,名称包含test前缀,从salespdb复制创建。

bb

从种子PDB创建一个PDB    

可以使用语句CREATE PLUGGABLE DATABASE从PDB$SEED(创建PDB的模板)复制文件创建一个PDB。下图说明了从种子创建PDB的过程:

bb

以下SQL语句使用OMF从种子PDB创建一个名为hrpdb的PDB:

CREATE PLUGGABLE DATABASE hrpdb  ADMIN USER dba1 IDENTIFIED BY password

通过克隆创建一个PDB    

这种方法将源PDB相关的文件复制到一个新的位置并将这些文件与新建的PDB关联。可以克隆同一个CDB或者其他CDB中的PDB。如果克隆另一个CDB中的PDB,必须使用数据库链接指定远程的CDB。下图说明了从同一个CDB中的PDB克隆一个PDB的过程:

bb

如果PDB的底层文件系统支持存储快照,可以指定SNAPSHOT COPY从句使用存储快照克隆PDB。这种情况下,Oracle数据库不会完全复制源数据文件,而是创建一个底层文件系统的存储级别快照,并使用它创建PDB克隆。快照复制使得克隆可以接近瞬时完成。

以下SQL语句从名为hrpdb的PDB克隆一个名为salespdb的PDB:

CREATE PLUGGABLE DATABASE salespdb FROM hrpdb

通过插拔创建一个PDB    

PDB在拔出状态下是一个自包含的数据文件组和一个XML元数据文件。这种方法使用描述PDB和相关文件的XML元数据文件将它与CDB关联。下图说明了插入一个已拔出的PDB的过程:

bb

以下SQL语句基于XML文件中的元数据插入一个名为financepdb的PDB,并指定了NOCOPY,因为不需要对文件进行重命名:

CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/financepdb.xml' NOCOPY

从一个非CDB创建一个PDB

可以使用以下方法从一个已有的非CDB创建一个PDB:

  • 对于Oracle Database 12c中的非CDB,执行DBMS_PDB.DESCRIBE。将非CDB置于事务一致性的状态,然后运行DBMS_PDB.DESCRIBE函数生成关于该数据库的XML元数据。连接到CDB中的root后,执行CREATE PLUGGABLE DATABSE语句从已有的非PDB创建一个PDB。
  • 使用包含或者不包含可传输表空间的Oracle Data Pump。可以使用Oracle Data Pump定义关于非CDB的数据集。非CDB可以是当前版本或者早期版本,例如Oracle Database 10g。在已有的CDB中创建一个空的PDB,然后使用Oracle Data Pump将数据集导入PDB。完整可传输导出使用Oracle Data Pump导出创建数据库完整副本所需的全部对象和数据。Oracle Data Pump导出可以使用可传输选项导出的所有对象,然后使用直接路径插入和外部表导出其余对象。完整可传输转储文件包含了数据库中的全部对象,不仅仅是与表相关的对象。完整可传输导出从Oracle Database 11g Release 2(11.2.0.3)开始可用,可以用于导入Oracle Database 12c。
  • 使用Oracle GoldenGate复制。将数据从非CDB复制到PDB,当PDB追上非CDB,转移至PDB。    

下图演示了在非CDB上运行DBMS_PDB.DESCRIBE函数,然后使用非CDB文件创建PDB的方法:

bb

fj.pngcncpt345.jpg

fj.pngcncpt346.jpg

fj.pngcncpt347.jpg

fj.pngadmin095.jpg

fj.pngcncpt358.jpg

fj.pngcncpt350.jpg

fj.pngadmin089.jpg

fj.pngadmin091.jpg

fj.pngadmin090.jpg

fj.pngadmin098.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24945919/viewspace-773638/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24945919/viewspace-773638/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值