Oracle 12C 引入了 CDB 与 PDB 的新特性,在 ORACLE 12C 数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB 全称为 Container Database,中文翻译为数据库容器,PDB 全称为 Pluggable Database,即可插拔数据库。在 ORACLE 12C 之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入 ORACLE 12C 后,实例与数据库可以是一对多的关系。下面是官方文档关于CDB与PDB的关系图。 

CDB 组件(Components of a CDB) 

一个 CDB 数据库容器包含了下面一些组件:

  • ROOT 组件
    ROOT 又叫 CDB$ROOT,存储着 ORACLE 提供的元数据和 Common User,元数据的一个例子是 ORACLE 提供的 PL/SQL 包的源代码,Common User 是指在每个容器中都存在的用户。

  • SEED 组件
    SEED 又叫 PDB$SEED,这个是你创建 PDBS 数据库的模板,你不能在 SEED 中添加或修改一个对象。一个 CDB 中有且只能有一个 SEED。

  • PDBS
    CDB 中可以有一个或多个 PDBS,PDBS 向后兼容,可以像以前在数据库中那样操作 PDBS,这里指大多数常规操作。

这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个 PDB 是一个容器。每个容器在 CDB 中都有一个独一无二的的 ID和名称。

注意:

  1. 一个 CDB 可以包含 253 个 PDB(去掉一个是 seed 还能创建 252 个 PDB)。

  2. 文件

    1. 数据文件:ROOT,SEED 以及每一个 PDB 的数据文件是独立的。

    2. REDO:一个单实例的 CDB 有一个 redo log;RAC 环境中每个实例有一个 redo log。

    3. control file: 一个 CDB 也仅有一个控制文件(可以多路复用)。

    4. 参数文件:一个 CDB 使用一个 SPFILE 或者一个 PFILE,其中为 ROOT 设置的参数的值可以被 PDB 继承。另外,也可以使用 ALTER SYSTEM 语句来设置 PDB 的参数。对参数文件执行操作时,必须使用 common user 并且使用 AS SYSDBA、ASSYSOPER、AS SYSBACKUP来连接数据库。要创建 CDB,必须要将初始化参数 ENABLE_PLUGGABLE_DATABASE 的值设置为 TRUE。

  3. 进程:只有一组后台进程,它们被 ROOT 和所有 PDB 共享。

  4. 数据库设置

    1. 字符集:所有 PDB 的字符集都使用 CDB 的字符集。

    2. 时区:可以设置所有 PDB 的时区与 CDB 相同,也可以单独为 PDB 设置时区。

    3. db_size:块大小被应用于整个 CDB。

    4. db_name:ROOT 的全局数据库名就是 CDB 的全局数据库名;PDB 的全局数据库名是由 PDB name 和 DB_DOMAIN 参数共同定义的。

  5. 表空间:

    1. ROOT 与每一个 PDB 都有自己的 SYSAUX 表空间和 SYSTEM 表空间。可以为 ROOT 和每一个 PDB 设置默认表空间。而默认的临时表空间对于整个 CDB 只有一个,但是可以为每个 PDB 创建临时表空间。

    2. UNDO 表空间对于 CDB 是唯一的。在 CDB 中,初始化参数UNDO_MANAGEMENT 必须被设置为 AUTO。当前容器为 PDB 时,无法通过数据字典视图查看 UNDO 表空间,只能通过动态性能视图。 

PDB 简介

PDB新特点的优势

  • 可以把多个 PDB 集成进一个平台。

  • 可以快速提供一个新的 PDB 或一个已有 PDB 的克隆。

  • 通过拔插技术,可以快速把存在的数据库重新部署到一个新平台上。

  • 多个 PDB 数据库补丁或升级一次完成。

  • 通过把单个 PDB 拔插到较高版本的不同 CDB,可以补丁或升级一个PDB。

  • 从同一个 CDB 中众多 PDB 中分离出某个 PDB 的内容。

  • 分离这些 PDB 应用管理员的责任。 

PDB新特点的功能

  • 在一个 CDB 中,你可以拥有很多 PDB。

  • PDB 和 12.1 之前版本的普通数据库是向后兼容的。

  • PDB 对应用是透明的——你不需要改变客户端代码或数据库对象。

  • RAC 中每个实例作为一个整体打开 CDB(因此 CDB 和其中的 PDB 数据库版本都是相同的)。

  • 会话仅仅看到它自己连接的那个 PDB。

  • 你可以从一个 CDB 拔出一个 PDB,然后插入另一个 CDB。

  • 你可以在同一个 CDB 或不同 CDB 间克隆 PDB。

  • 资源管理器随着 PDB 的功能得以扩展。

  • 通过 SQL 语句实现了实体 PDB 的操作(创建,拔出,插入,克隆,清除,设置打开模式)。

  • 当连接到所谓的“根”(ROOT)时,CDB 管理员来执行这些操作。

  • 所有的 PDB 能被一次备份,但可以分别单独恢复。

PDB的详解

  • 每个 PDB 有自己的私有数据字典用于用户创建的数据库对象;另一方面,CDB 作为一个整体也包含 Oracle 提供系统的数据字典,其中,每个数据字典定义自己的命名空间。换句话说,有全局数据字典(CDB级)和本地数据字典(PDB级)。

  • 有新的分开的数据字典架构,该架构允许一个 PDB 被快速从一个 CDB 拔出并插入一个不同的 CDB。

  • 每个 PDB 只能看到 Oracle 提供系统的只读定义。

  • 有全局数据库参数,也有本地数据库参数。PDB 参数仅仅属于特定的 PDB,并且拔出后,PDB 参数也将保持不变。

  • 数据库用户可以是全局的(CDB)或本地的(PDB)。SYS 和 SYSTEM 用户一开始就在两级 DB 中存在。如果你在 CDB 中创建了一个新用户,那么你在 PDB 中也能看到这个用户。在 PDB 中创建的用户只能在该 PDB 中使用。

  • 临时表空间可以是全局或本地的。

  • Redo 日志和 Undo 表空间都是全局的(CDB级)。

  • Data Guard 在 CDB 级作为一个整体发挥作用;RMAN 调度的备份也作为一个整体在 CDB 级完成;任何时候,你可以只备份一个 PDB。

  • 应用连接 PDB 时,不需做代码修改;系统管理员可以连接 CDB;连接串中的服务名确定目标 PDB。

  • PDB 允许更加清晰的声明定义一个应用;一个 PDB 对同一个 CDB 里的其他 PDB一无所知;每个 PDB 是个密闭的容器。这保证了新层面 DB 的独立和安全

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐