Oracle多租户架构详解:从核心概念到现代实践

阿里云教程4周前发布
16 1 0

Oracle多租户架构自12c版本引入,是Oracle数据库发展史上一个里程碑式的变革。它彻底改变了传统数据库中“一个实例对应一个数据库”的模型,实现了高效的数据库整合。经过多个版本的迭代,该架构已超级成熟和稳定,成为Oracle数据库云化的基石。本文将以现代化视角重新梳理这一核心架构。

一、 核心概念:CDB与PDB

  • CDB(容器数据库): 作为一个整体的数据库实例,承载着所有底层资源(如后台进程、SGA内存区域)的管理。它是与操作系统交互的实体。
  • PDB(可插拔数据库): CDB内部一个自包含的、功能完备的数据库。对应用程序和开发者而言,每个PDB看起来就是一个独立的数据库(拥有自己的表空间、用户、Schema等),但它们共享同一个CDB的实例和系统资源。

现代化解读
在12c初期,多租户是一个可选特性。但从Oracle 21c开始,多租户架构成为唯一架构,即创建数据库时默认就是CDB。这明确了Oracle未来的发展方向。最新的Oracle 23ai 更是强化了多租户在数据分析和AI负载下的能力。

二、 CDB的核心组件

一个CDB包含以下关键组件,概念与原文一致,但表述更准确:

根容器(ROOT, CDB$ROOT)

  1. 存储所有PDB共享的元数据,如Oracle内置的系统字典表和公共PL/SQL包源码。
  2. 容纳公共用户,这些用户在CDB和所有PDB中均存在。

种子容器(SEED, PDB$SEED):作为创建新PDB的只读模板。通过“热克隆”种子可以快速创建新的PDB,这是实现数据库快速供给的关键。

现代最佳实践: 在生产环境中,企业一般会创建一个自定义的黄金镜像PDB作为模板,替代标准的PDB$SEED,以便新PDB能包含预配置的业务参数、表空间或用户。

用户PDB(PDBs)

  1. 这是承载实际业务负载的数据库。一个CDB中可以创建数百甚至数千个PDB,实现极高的资源整合率。
  2. 向后兼容性: 应用程序连接到一个PDB后,其体验与连接一个传统的非CDB数据库完全无异。

三、 实践操作:连接与管理(现代化命令)

以下操作基于当前主流的Oracle 19c/21c环境,语法更简洁。

1. 连接到CDB并确认环境
使用操作系统认证或TNS连接至数据库实例。

sqlplus / as sysdba

查看数据库是否为CDB:

SQL> SELECT name, cdb, con_id FROM v$database;
NAME      CDB     CON_ID
--------- ---     ----------
ORCL      YES     1

2. 查看容器信息
使用动态性能视图 v$containers 可以更清晰地查看所有容器状态。

SQL> SELECT con_id, name, open_mode, restricted FROM v$containers ORDER BY con_id;
   CON_ID NAME                           OPEN_MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         1 CDB$ROOT                       READ WRITE NO
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO

3. 连接到PDB(现代推荐方式)
在CDB$ROOT中,使用 ALTER SESSION SET CONTAINER 命令切换会话至目标PDB。

SQL> ALTER SESSION SET CONTAINER = ORCLPDB;
Session altered.
SQL> SHOW CON_NAME
CON_NAME
------------------------------
ORCLPDB

更现代的方式是使用Easy Connect语法直接从客户端连接到特定PDB,无需在CDB中切换,这更符合云原生应用的使用习惯:

sqlplus sys@localhost:1521/ORCLPDB as sysdba

4. 启动与关闭PDB
PDB的启动和关闭超级快速,由于不涉及实例进程的启停。

启动单个PDB

  • SQL> ALTER PLUGGABLE DATABASE orclpdb OPEN;

关闭单个PDB

  • SQL> ALTER PLUGGABLE DATABASE orclpdb CLOSE;

保存PDB状态:为了让PDB在CDB实例重启后自动打开,可以执行:

  • SQL> ALTER PLUGGABLE DATABASE orclpdb SAVE STATE;

四、 用户管理:公共用户与本地用户

这个概念保持不变,但理解更为深化。

  • 公共用户(Common User): 在CDB级别创建,用于跨容器的统一管理(如SYS, SYSTEM或自定义的C##ADMIN)。
  • 本地用户(Local User): 在特定的PDB内创建,仅隶属于该PDB,用于业务应用连接。这是创建应用用户的推荐方式

创建本地用户示例

-- 第一连接到目标PDB
SQL> ALTER SESSION SET CONTAINER = ORCLPDB;
SQL> CREATE USER app_user IDENTIFIED BY "SecurePass123!" DEFAULT TABLESPACE users;
SQL> GRANT CREATE SESSION, CREATE TABLE TO app_user;

五、 现代多租户的核心优势与高级特性

相较于12c初期的文档,现代多租户架构的优势更加突出:

  1. 极高的资源整合与成本节约: 通过共享内存、进程和系统资源,大幅降低硬件和软件许可成本。
  2. 快速供给与克隆: 使用 CREATE PLUGGABLE DATABASE … FROM … 命令,可以在几分钟内从现有PDB克隆出一个新的PDB,极大加速了开发、测试环境的搭建。
  3. 无缝的数据与功能迁移: PDB可以在不同的CDB之间轻松拔插(Unplug/Plug),实现负载均衡、升级或跨云迁移。
  4. 完善的资源隔离: 通过Oracle Resource Manager,可以为每个PDB准确分配CPU、I/O和会话资源,避免“吵闹的邻居”问题。
  5. 应用容器(Application Containers): 这是一个高级特性,允许将一组相关的PDB(称为“应用PDB”)共享一个公共的应用程序Schema(称为“应用根”),超级适合SaaS多租户场景。

总结

Oracle多租户架构已经从12c的一个“新特性”演变为现代Oracle数据库的核心和标准。它不仅提供了无与伦比的数据库整合能力,更通过快速的克隆、迁移和灵活的资源管理,为数据库的灵敏性、可维护性和云化转型奠定了坚实基础。对于任何使用Oracle 12c之后版本的用户,深入理解并熟练运用多租户架构,是进行高效数据库管理和架构设计的必备技能。

© 版权声明

相关文章

1 条评论

none
暂无评论...