Oracle21c-多租户架构-CDB和PDB
详见官方文档:
https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/CDBs-and-PDBs.html#GUID-5C339A60-2163-4ECE-B7A9-4D67D3D894FB
多租户架构使 Oracle 数据库能够充当多租户容器数据库 (CDB)。
从 Oracle Database 21c 开始,多租户容器数据库是唯一受支持的架构。在以前的版本中,Oracle 支持非容器数据库(非 CDB)。
关于 CDB 中的容器
容器是多租户容器数据库 (CDB)中模式、对象和相关结构的集合。在 CDB 中,每个容器都有唯一的 ID 和名称。
CDB包括零个、一个或多个客户创建的可插拔数据库 (PDB) 和应用程序容器。PDB是模式、模式对象和非模式对象的可移植集合,在 Oracle Net 客户端中显示为单独的数据库。应用程序容器是一种可选的、用户创建的 CDB 组件,它为一个或多个应用程序后端存储数据和元数据。一个 CDB 包含零个或多个应用程序容器。
更多应用容器请看:
https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/app-containers.html#GUID-B964031E-8ACE-4603-8F1E-DD173BE5BA01
图-CDB中的容器
每个 CDB 都有以下容器:
-
恰好一个 CDB 根容器(也简称为 root)
CDB 根是所有 PDB 所属的模式、模式对象和非模式对象的集合(请参阅“ CDB和 PDB ”)。根存储 Oracle 提供的元数据和普通用户。元数据的一个示例是 Oracle 提供的 PL/SQL 包的源代码。普通用户是每个容器中已知的数据库用户(请参阅“普通用户帐户”)。根容器名为CDB$ROOT. -
正好一个系统容器
系统容器包括根 CDB 和 CDB 中的所有 PDB 。因此,系统容器是 CDB 本身的逻辑容器。 -
零个或多个应用程序容器
一个应用程序容器只包含一个应用程序根目录,以及插入该根目录的 PDB。系统容器包含 CDB 根和 CDB 中的所有PDB,而应用程序容器仅包含插入到应用程序根中的 PDB。应用程序根属于 CDB 根,不属于其他容器。 -
零个或多个用户创建的 PDB
PDB 包含一组特定功能所需的数据和代码(请参阅“ PDB ”)。例如,PDB 可以支持特定的应用程序,例如人力资源或销售应用程序。创建 CDB 时不存在任何 PDB。您可以根据业务需求添加 PDB。一个 PDB 恰好属于零个或一个应用程序容器。如果一个 PDB 属于一个应用程序容器,那么它就是一个应用程序 PDB。例如,cust1_pdb应用cust2_pdb程序 PDB 可能属于saas_sales_ac应用程序容器,在这种情况下,它们不属于其他应用程序容器。应用程序种子是一个可选的应用程序 PDB,它充当用户创建的 PDB 模板,使您能够快速创建新的应用程序 PDB。
-
正好一个种子 PDB
种子 PDB 是系统提供的模板,CDB 可以使用它来创建新的 PDB。种子 PDB 被命名为PDB$SEED. 您不能在 中添加或修改对象PDB$SEED。
没有应用程序容器的 CDB
此示例显示了一个包含五个容器的简单 CDB:系统容器(整个 CDB)、CDB 根、PDB 种子 ( PDB$SEED) 和两个 PDB。每个 PDB 都有自己的专用应用程序。不同的 PDB 管理员管理每个 PDB。一个共同的用户存在于一个具有单一身份的 CDB 中。在此示例中,普通用户SYS可以管理根和每个 PDB。在物理级别,此 CDB 由一个或多个数据库实例管理,并包含一组用于每个 PDB 和 CDB 本身的数据文件。
带有应用程序容器的 CDB
在此示例中,CDB 包含一个名为saas_sales_ac. 在应用程序容器内,应用程序 PDBcust1_pdb支持一个客户的应用程序,应用程序 PDBcust2_pdb支持不同客户的应用程序。CDB 还包含一个名为 的 PDB hrpdb,它支持 HR 应用程序,但不属于应用程序容器。
在此示例中,多个 DBA 管理 CDB 环境:
CDB 管理员管理 CDB 本身。
应用程序容器管理员管理saas_sales_ac容器,包括应用程序安装和升级。
应用程序 PDB 管理员管理saas_sales_ac容器中的两个 PDB:cust1_pdb和cust2_pdb.
PDB 管理员管理hrpdb.
CDB 根和系统容器
CDB 根,也简称为根,是所有 PDB 所属的模式、模式对象和非模式对象的集合。
每个 CDB 都有一个且只有一个名为CDB$ROOT. 根存储管理 PDB 所需的系统元数据。所有 PDB 都属于根。系统容器是 CDB 根和属于该根的所有 PDB 。
CDB 根不存储用户数据。Oracle 建议您不要将公共对象添加到根目录或修改根目录中的 Oracle 提供的模式。但是,您可以为数据库管理创建通用用户和角色。具有必要权限的普通用户可以在容器之间切换。
Oracle 推荐使用 AL32UTF8 作为根字符集。具有不同字符集的 PDB 可以驻留在同一个 CDB 中,而无需进行字符集转换。
CDB 中的所有容器:
以下查询由连接到 CDB 根的管理用户发出,列出了 CDB 中的所有容器(包括种子和 CDB 根),按CON_ID.
COL NAME FORMAT A15
SELECT NAME, CON_ID, DBID, CON_UID, GUID
FROM V$CONTAINERS ORDER BY CON_ID;
NAME CON_ID DBID CON_UID GUID
------------- ------ ---------- ---------- --------------------------------
CDB$ROOT 1 1895287725 1 2003321EDD4F60D6E0534E40E40A41C5
PDB$SEED 2 2795386505 2795386505 200AC90679F07B55E05396C0E40A23FE
SAAS_SALES_AC 3 1239646423 1239646423 200B4CE0A8DC1D24E05396C0E40AF8EE
SALESPDB 4 3692549634 3692549634 200B4928319C1BCCE05396C0E40A2432
HRPDB 5 3784483090 3784483090 200B4928319D1BCCE05396C0E40A2432
复制