Oracle 18c新特性:多租户舰队 CDB Fleet
在 Oracle 18c 中,多租户的一个新特性 CDB Fleet 被引入进来,我们可以把这个特性称为:多租户舰队。(关注本公众号: Oranews 回复 2018OOW 可以在 “CDB Fleet” 目录找到这个 118 页的 PPT)我们知道,在 Oracle 12.2 中,每个多租户可以最多支持 4096 个 PDB,这是从12
在 Oracle 18c 中,多租户的一个新特性 CDB Fleet 被引入进来,我们可以把这个特性称为: 多租户舰队 。
我们知道,在 Oracle 12.2 中,每个多租户可以最多支持 4096 个 PDB,这是从12.1 的 252个 PDB 支持升级而来的,主要特性如下图所示:
Oracle Database 18c 引入了CDB Fleet功能,可以帮助我们 将多个 CDB 的 PDB 聚合管理,仿佛是一个逻辑的 CDB 一样 。
CDB Fleet旨在提供更高的可扩展性和为多CDB的集中管理提供底层基础架构, 主要的特性如下:
单个 CDB 中的最大PDB数是4096个,CDB舰队则可以逻辑上容纳超过4096个PDB。
单个配置中的不同PDB需要不同的服务类型才能以最佳方式运行,例如,一些PDB可能用于处理大的事务负载,而其他PDB主要用于监控。 通常需要区别配置适用于这些PDB的服务器资源,例如CPU,内存,I / O速率和存储系统。
每个CDB都可以使用所有常用的数据库功能来实现 CDB 中 PDB 的高可用性,可伸缩性和恢复,例如Real Application Clusters(RAC),Data Guard,RMAN,PITR和Flashback。
PDB名称在舰队中的所有CDB中必须是唯一的。 PDB可以在舰队中的任何CDB中创建,但只能在物理存在的CDB中打开。
CDB舰队包含两个角色: CDB领队(CDB Lead) 和 CDB成员(CDB Member) 。来自各个CDB的PDB信息与CDB Lead同步。
配置 CDB Lead 需要从CDB root 开始,CDB Lead 能够:
监控舰队中所有CDB的所有PDB;
通过跨容器查询报告信息,并从舰队中所有CDB的所有PDB收集诊断信息
从 Fleet 中所有CDB的所有PDB查询Oracle对象
要配置CDB舰队,需要首先定义 Lead 然后定义 Member:
要将CDB定义为CDB Fleet 中的CDB Lead,需要从CDB root将LEAD_CDB数据库属性设置为TRUE。
在CDB Lead的CDB root 中,使用一个 common 用户并授予适当的权限。
-
假定网络已配置正常,当前CDB可以使用DB Link中定义的连接描述符连接到CDB Lead,以下步骤将其他CDB定义为CDB Fleet的成员:
连接到另一个 CDB 的 CDB Root;
使用与 CDB Lead 中使用的常规用户相同的常规用户,因为我们必须使用固定用户创建公共数据库链接;
将LEAD_CDB_URI数据库属性设置为指向CDB Lead 的数据库链接的名称;
CDB舰队中的CDB Lead可以监控CDB Fleet中CDB的PDB。你可以在一个容器中安装监视应用程序,并使用CDB视图和GV $视图来监视和处理整个CDB Fleet 的诊断数据。在 CDB Lead 中发出的跨容器查询可以通过Oracle提供的对象在CDB Fleet 中的所有PDB中自动执行。
在CDB Fleet中的不同PDB(或应用程序PDB)中使用Oracle提供的甚至是通用应用程序模式对象,您可以使用CONTAINERS子句或CONTAINER_MAP在Fleet中的多个CDB的所有PDB上运行查询。这使得来自Fleet中不同CDB中的PDB的数据聚合成为可能。应用程序可以安装在 Application root 中,并且 Fleet 中的每个CDB都可以具有 Application root 克隆,以启用跨CDB的通用应用程序架构。
CDB Lead 可以作为一个中心位置,您可以在其中查看有关多个CDB的所有PDB的信息和状态。
给用户介绍Oracle多租户新特性时,多次忍不住将CDB比喻为航母,PDB则是停靠之上的舰载机。没想到18c竟然出了航母战斗群,^_^
18c中引入了CDB fleet新特性,能够实现以下的功能:
扩容PDB支持数量,单个CDB最大能够支持4096个PDB,CDB fleet大大扩展了这一数量;
多CDB数据库的集中管理,降低管理成本;
CDB fleet支持所有的数据库功能,如Oracle RAC,RMAN,基于时间点的恢复,Flashback等。
CDB fleet中有两个概念:CDBLead和CDB members。
在CDB Lead中能够进行所有CDB的管理,设置完成后,fleet中所有的PDB都对CDBLead可见,在Lead中可以使用以下方式获取全局信息,实现全局管理:
CDB和GV$视图
CONTAINERS字句以及CONTAINER_MAP
CDB Members则通过DBLink和CDB Lead进行通讯。
简单记录配置过程:
CDB Lead
1. 设置LEAD_CDB
ALTER SESSION SET CONTAINER = CDB$ROOT;
ALTER DATABASE SET LEAD_CDB = TRUE;
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='LEAD_CDB';
PROPERTY_VALUE
----------------------
TRUE
2. 创建用于CDB Member连接的用户
create user c##cf1 identified by oracle;
grant dba to c##cf1;
CDB member
1. 配置连接串
lead_pod =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.19)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora18c)
)
)
2. 创建连接CDB Lead的DB LINK
CREATE PUBLIC DATABASE LINK lead_link
CONNECT TO C##CF1 IDENTIFIED BY oracle
USING 'lead_pod';
3. 设置LEAD_CDB_URI属性
ALTER DATABASE SET LEAD_CDB_URI ='dblink:LEAD_LINK';
SELECT PROPERTY_VALUE FROMDATABASE_PROPERTIES WHERE PROPERTY_NAME='LEAD_CDB_URI';
PROPERTY_VALUE
--------------------------------------------------------------------------------
dblink:LEAD_LINK
CDB Lead
1. CDB Lead中确认CDB Member信息
SQL> select pdb_name, status from cdb_pdbs;
PDB_NAME STATUS
------------------------------------------------------------------------------------------------------------------------------------------
PDB$SEED NORMAL
orclcdb STUB
PDB1 NEW
PDB2 STUB
PS: 状态为STUB的PDB信息来自于CDB Member.