甲骨文云 Multitenant DB 1 : 轻松云服务器多租户架构入门
2024-01-15
原创文章
多租户架构使Oracle数据库能够作为多租户容器数据库(CDB)运行。这一特性在Oracle数据库12c及以后的版本中可用,因此您必须安装或升级到Oracle数据库12c或更高版本。数据库兼容性级别必须设置为12.0.0或更高版本,以使用多租户特性。以下是多租户架构中CDB/PDB如何相互交互的图像:

在上图中,我们有:
- 一个CDB
- 一个CDB$ROOT
- 一个PDB$SEED
- 三个直接链接到CDB的PDB
- 两个应用根 - 一个有两个应用PDB和一个应用种子,另一个有三个应用PDB链接到它。
- 以下是这些组件的一些详细信息:
什么是非NON-CDB数据库?
您熟悉的普通数据库,以及早期使用的数据库。只有一个简单的数据库,没有可插拔/容器数据库等。
所有Oracle数据库12c之前的数据库都是非CDB。
什么是CDB?
- CDB是容器数据库。
- 一个CDB包括零个、一个或多个客户创建的可插拔数据库(PDB)。
- 在CDB中,大多数用户数据驻留在PDB中。根部分不包含用户数据或仅包含最少的用户数据。
- CDB的磁盘存储空间需求是Oracle数据库安装所需的空间加上所有将成为CDB一部分的PDB的空间总和。
什么是PDB?
- 一个PDB是一组模式、模式对象和非模式对象的可移植集合,对于一个Oracle Net客户端来说,它看起来像一个非CDB。
什么是系统容器?
- 系统容器包括根CDB和CDB中的所有PDB。因此,系统容器是CDB本身的逻辑容器。
- 容器是多租户架构内数据或元数据的“逻辑”集合。
CDB/PDB中的数据库实例概念是什么?
- 数据库实例是一组管理数据库文件的内存结构。
- 在物理层面上,CDB是由CREATE DATABASE语句创建的磁盘上的一组文件。
- CDB包含一个或多个用户创建的PDB。一个PDB包含其自己的数据文件集,这些文件属于CDB的整体数据文件集。数据库实例管理与CDB及其PDB相关的数据,并为它们的用户提供服务。
- 每个运行中的CDB至少与一个Oracle数据库实例关联。因为实例存在于内存中,而数据库(狭义上的术语)是磁盘上的一组文件,所以实例可以在没有数据库的情况下存在,而数据库也可以在没有实例的情况下存在。
CDB的内容可以是什么?
1.精确地一个CDB根容器(也简称为根)
- CDB根是一组模式、模式对象和非模式对象的集合,所有PDB都属于这个集合
- 根存储Oracle提供的元数据和公共用户。
- 元数据的一个例子是Oracle提供的PL/SQL包的源代码。
- 根容器名为CDB$ROOT。
- CDB根不存储用户数据。
- Oracle建议您不要向根添加公共对象或修改根中的Oracle提供的模式。但是,您可以创建公共用户和角色用于数据库管理。具有必要权限的公共用户可以在容器之间切换。
- Oracle建议根字符集使用AL32UTF8。不同字符集的PDB可以驻留在同一个CDB中,无需进行字符集转换。
2.精确地一个系统容器
- 系统容器包括根CDB和CDB中的所有PDB。因此,系统容器是CDB本身的逻辑容器,如前所述。
3.零个或多个应用容器
- 应用容器由一个应用根和插入此根的PDB组成。
- 虽然系统容器包含CDB根和CDB内的所有PDB,但应用容器只包含插入应用根的PDB。
- 应用根属于CDB根,不属于其他任何容器。
- 通常,您不会看到许多客户端使用应用容器设置。大多数客户端将在CDB内使用PDB。
4.零个或多个用户创建的PDB
- PDB包含特定功能集所需的数据和代码。例如,一个PDB可以支持特定应用程序,如人力资源或销售应用程序。
- 创建CDB时不存在PDB。您根据业务需求添加PDB。
- 一个PDB精确地属于零个或一个应用容器。如果一个PDB属于一个应用容器,那么它就是一个应用PDB。
- PDB是一组用户创建的模式、对象和相关结构,对客户端应用程序来说,它在逻辑上看起来像一个独立的数据库。
- 每个PDB都由SYS拥有,无论是哪个用户创建的PDB。SYS是CDB中的一个公共用户。
- 所有PDB都是用CREATE PLUGGABLE DATABASE语句创建的,除了Oracle提供的PDB$SEED。
5.精确地一个种子PDB
- 种子PDB是CDB用来创建新PDB的系统提供的模板。
- 种子PDB名为PDB$SEED。
- 您不能在PDB$SEED中添加或修改对象。
PDBS类型分类
在轻松云服务器的多租户架构中,您可以创建以下类型的PDB(可插拔数据库):
1.标准PDB Standard PDB
- 通过运行CREATE PLUGGABLE DATABASE而不指定PDB为种子、代理PDB或应用根来创建。
- a) 插入CDB根的PDB:属于CDB根容器而非应用容器,不能使用应用公共对象。这是最常用的标准PDB类型。
- b) 作为应用PDB插入:属于一个应用容器,与插入CDB根的PDB不同,应用PDB可以共享应用容器内的主应用定义。例如,应用根中的usa_zipcodes表可能是一个数据链接的公共对象,这意味着它包含所有插入此根的应用PDB都可以访问的数据。
2.应用根Application Root
- 可以被视为特定应用的根容器,类似于嵌套在主容器内的容器。
- 它充当应用后端的主定义存储库,包括公共数据和元数据。
- 创建应用根时,连接到CDB根并在CREATE PLUGGABLE DATABASE语句中指定AS APPLICATION CONTAINER子句。
3.种子Seed PDBs
- 与标准PDB不同,种子PDB不是为支持应用程序而设计的。
- 种子是创建支持应用程序的PDB的模板。
- 可以是插入CDB根的种子PDB(PDB$SEED)或应用种子PDB。
4.代理Proxy PDBs
- 代理PDB是使用数据库链接引用远程CDB中的PDB。
- 在代理PDB中执行语句时,该语句在被引用的PDB中执行。
- 必须在连接到CDB根或应用根时创建代理PDB。
- 代理PDB不经常使用。
多租户环境中使用的工具:
- SQL*Plus — 创建、管理和监控CDB和PDB。
- Oracle Enterprise Manager Cloud Control — 管理和监控CDB及其PDB。
- Oracle Enterprise Manager Database Express — 可为CDB、单独的托管PDB或两者配置。
- Oracle Database Configuration Assistant — 创建、迁移、克隆、插入和拔出PDB。
- Oracle SQL Developer — 客户端工具,提供图形用户界面,用于配置CDB、创建PDB、插入和拔出PDB、修改PDB状态、将PDB克隆到Oracle Cloud、热克隆/刷新PDB、在应用根之间迁移PDB等。
- Server Control (SRVCTL) 实用工具 — 创建和管理PDB的服务。
CDB-PDB中的命名规范:
- 在CDB中的容器共享相同的命名空间,这意味着它们必须在此命名空间中具有唯一名称。
- 对于以下容器,名称在同一CDB中不能冲突:CDB根插入CDB根的PDB应用根应用PDB
- PDB和应用根容器的名称必须遵循与网络服务名称相同的规则。由于PDB或应用根有其自己的服务名称,容器名称必须在所有通过特定监听器暴露服务的CDB中是唯一的。
CDB中的公共和本地对象:
- 公共对象:在CDB根或应用根中定义,并可以使用元数据链接或对象链接引用。数据库提供的公共对象在CDB$ROOT中定义,无法更改。Oracle数据库不支持在CDB$ROOT中创建公共对象。
- 本地对象:所有不是公共对象的对象。
开启您的Oracle云之旅:Agilewing - 您的智能云服务伙伴
作为Oracle的高级合作伙伴,Agilewing正重新定义企业体验Oracle云服务的方式。借助于其简化的开户流程和一流的技术支持,Agilewing将复杂的开户和操作流程转化为一种轻松、直观的体验。通过我们的一站式服务,您可以迅速开启并享受Oracle云的全方位服务,从而无缝融入云端世界。
Agilewing的AgileCDN服务,结合了OCI的云基础服务,提供了一流的全球内容加速解决方案。超过2800个全球POP节点和7000个直连点的强大网络,确保了无论您的业务扩展到全球哪个角落,都能保持高效稳定的运行。
利用Oracle云的先进技术,Agilewing致力于简化云服务搭建、云迁移和业务出海的过程。我们的合作模式为客户带来经济高效的解决方案,使他们能够更加专注于核心业务,同时享受Oracle云的高性能和安全保障。
Oracle云服务,作为一个充满潜力的领域,以其高性能、安全性和全球统一的服务标准,为各类企业开启了新的机遇之门。通过Agilewing的专业服务,无论是个人用户还是企业,都能轻松步入这个充满技术革新和高效能的新时代。现在,就让Agilewing引领您开始探索Oracle云服务,打开一个全新的世界大门。
如您想咨询 Oracle 的相关业务,可联系搜索微信号:lhh1843812463 或 woshiwhw123
或者可以进入以下群组进行咨询:
微信公众号

微信技术交流社群:
