OCP-06:多租户架构

Oracle 数据库在 19C 中引入了多租户的概念,有了 CDB 和 PDB 组件。

容器是多租户容器数据库(CDB)中模式、对象和相关结构的集合,在逻辑上应用程序将其显示为单独的数据库。
在 CDB 中,每个容器都有一个唯一的 ID 和名称,ROOT 和每个 PDB 都被视为一个容器。
PDB 隔离数据和操作,从用户或应用的角度来看,每个 PDB 看起来都是独立的数据库。

CDB ROOT 容器

ROOT 容器是所有 PDB 所属的模式、模式对象和非模式对象的集合。
每个 CDB 有且只有一个 ROOT 容器,被命名为 CDB$ROOT,用于存储管理 PDB 所需的系统元数据。

PDB

PDB 是用户创建的一组模式、对象和相关结构,在逻辑上对应用显示为单独的数据库。
每个 PDB 都归 sys 所有,sys 是 CDB 中的一个公共用户。

使用 PDB 可以实现以下目标:

  • 存储特定应用程序的数据
  • 将数据移动到其它 CDB
  • 在 PDB 中隔离授权

PDB 有单独的名称空间,对以下结构有影响:

  • 模式:一个 PDB 中包含的架构可能与另一个 PDB 中的架构同名,这两个模式可以表示不同的本地用户。
  • 对象:对象必须在 PDB 中具有唯一名称,而不是在 CDB 中的所有容器。

应用程序容器是 CDB 中一个可选的、用户创建的容器,用于存储一个或多个应用程序的数据和元数据,一个应用程序容器可以包含多个应用程序 PDB,并允许这些 PDB 共享元数据和数据。

多租户体系结构的好处:

  • 降低成本(共享进程、共享系统资源)
  • 更容易和更快速的数据和代码的移动
  • 更轻松管理和监控物理数据库
  • 分离数据和代码
  • 安全分离管理权限
  • 轻松性能调优

多租户体系结构对管理性的好处:

  • 更容易升级数据和代码
  • 更容易在服务器之间迁移
  • 防止 PDB 中的数据损坏
  • 能够在一个地方安装、管理和升级特定于应用程序的数据和元数据

CDB 中表空间和数据文件

CDB 的结构与非 CDB 相同,只是每个 PDB 都有自己的表空间集,包括自己的 SYSTEM、SYSAUX 和 undo 表空间。

CDB 和 PDB 管理

查看数据是否为 CDB:

SYS@orcl(CDB$ROOT)> select cdb from v$database;

CDB
---
YES

创建 PDB:

SYS@orcl(CDB$ROOT)> create pluggable database PDB3 admin user imxcai identified by 123;

Pluggable database created.

SYS@orcl(CDB$ROOT)> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         4 PDB2                           READ WRITE NO
         5 PDB3                           MOUNTED

查询状态:

SYS@orcl(CDB$ROOT)> col pdb_name format a15
SYS@orcl(CDB$ROOT)> select pdb_name,status from cdb_pdbs;

PDB_NAME        STATUS
--------------- ----------
PDB1            NORMAL
PDB$SEED        NORMAL
PDB2            NORMAL
PDB3            NORMAL

如果状态为 NEED SYNC ,则需允许
为 PDB 修改名称:
要修改名称的 PDB 一定要处于 opend restricted 状态。

SYS@orcl(CDB$ROOT)> select name,open_mode from v$pdbs;

NAME            OPEN_MODE
--------------- ----------
PDB$SEED        READ ONLY
PDB1            READ WRITE
PDB2            READ WRITE
PDB3            READ WRITE

SYS@orcl(CDB$ROOT)> alter pluggable database PDB3 close immediate;

Pluggable database altered.

SYS@orcl(CDB$ROOT)> alter pluggable database PDB3 open restricted;

Pluggable database altered.

SYS@orcl(CDB$ROOT)> select name,restricted from v$pdbs;

NAME            RES
--------------- ---
PDB$SEED        NO
PDB1            NO
PDB2            NO
PDB3            YES

SYS@orcl(CDB$ROOT)> conn sys/oracle@localhost:1521/PDB3 as sysdba
Connected.
SYS@localhost:1521/PDB3(PDB3)> alter pluggable database PDB3 rename global_name to PDB3_new;

Pluggable database altered.

SYS@localhost:1521/PDB3(PDB3)> alter pluggable database close immediate;

Pluggable database altered.

SYS@localhost:1521/PDB3(PDB3)> conn / as sysdba
Connected.
SYS@orcl(CDB$ROOT)> alter pluggable database PDB3_new open;
Pluggable database altered.

SYS@orcl(CDB$ROOT)> select name, open_mode from v$pdbs;

NAME            OPEN_MODE
--------------- ----------
PDB$SEED        READ ONLY
PDB1            READ WRITE
PDB2            READ WRITE
PDB3_NEW        READ WRITE

PDB 删除:

SYS@orcl(CDB$ROOT)> alter pluggable database PDB3_NEW close immediate;

Pluggable database altered.

SYS@orcl(CDB$ROOT)> drop pluggable database PDB3_NEW including datafiles;

Pluggable database dropped.

SYS@orcl(CDB$ROOT)> select name,open_mode from v$pdbs;

NAME            OPEN_MODE
--------------- ----------
PDB$SEED        READ ONLY
PDB1            READ WRITE
PDB2            READ WRITE

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

滚动至顶部